diff --git a/cache.go b/cache.go index 304a5d8..2517b42 100644 --- a/cache.go +++ b/cache.go @@ -2,6 +2,7 @@ package rds_cache_go import ( "context" + "errors" "fmt" "github.com/go-redis/redis/v8" "time" @@ -60,9 +61,9 @@ type Cache interface { // Exist 判断某个缓存是否存在 Exist(key string) bool // Get 获取某个缓存的值 - Get(key string) interface{} + Get(key string) (interface{}, error) // Delete 删除指定缓存 - Delete(keys ...string) int64 + Delete(keys ...string) (int64, error) // HPut hash put HPut(key string, value ...interface{}) error // HMPut hash put 兼容redis v3 @@ -70,25 +71,25 @@ type Cache interface { // HKeyExist 判断hash表中的key是否存在 HKeyExist(key, field string) bool // HGet 获取hash表中指定field的值 - HGet(key, field string) interface{} + HGet(key, field string) (interface{}, error) // HGetAll 获取hash表中的全部值 - HGetAll(key string) map[string]string + HGetAll(key string) (map[string]string, error) // HGetKeyAll 获取hash表中的全部key - HGetKeyAll(key string) []string + HGetKeyAll(key string) ([]string, error) // HIncrBy 为哈希表 key 中的指定字段的整数值加上增量 increment 。 - HIncrBy(key, field string, incr int64) int64 + HIncrBy(key, field string, incr int64) (int64, error) // HFloatIncrBy 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。 - HFloatIncrBy(key, field string, incr float64) float64 + HFloatIncrBy(key, field string, incr float64) (float64, error) // HGetValAll 获取hash表中全部的value值 - HGetValAll(key string) []string + HGetValAll(key string) ([]string, error) // HDelete 删除hash表中一个或多个字段 - HDelete(key string, fields ...string) int64 + HDelete(key string, fields ...string) (int64, error) } -// @method NewCache -// @description: 初始化一个cache对象 -// @param opts ...Option -// @return Cache +// @method NewCache +// @description: 初始化一个cache对象 +// @param opts ...Option +// @return Cache func NewCache(opts ...Option) Cache { cha := new(config) @@ -124,13 +125,13 @@ type cache struct { ctx context.Context } -// @method Put -// @description: 放入缓存 -// @receiver c -// @param key string key -// @param value interface{} 值 -// @param ttl time.Duration 过期时间 -// @return error +// @method Put +// @description: 放入缓存 +// @receiver c +// @param key string key +// @param value interface{} 值 +// @param ttl time.Duration 过期时间 +// @return error func (c *cache) Put(key string, value interface{}, ttl time.Duration) error { _, err := c.client.Set(c.ctx, key, value, TTL(ttl)).Result() @@ -141,11 +142,11 @@ func (c *cache) Put(key string, value interface{}, ttl time.Duration) error { return nil } -// @method Exist -// @description: 判断指定缓存是否存在 -// @receiver c -// @param key string 缓存key -// @return bool +// @method Exist +// @description: 判断指定缓存是否存在 +// @receiver c +// @param key string 缓存key +// @return bool func (c *cache) Exist(key string) bool { result, err := c.client.Exists(c.ctx, key).Result() if err != nil { @@ -159,65 +160,65 @@ func (c *cache) Exist(key string) bool { return true } -// @method Get -// @description: 获取指定缓存 -// @receiver c -// @param key string 缓存key -// @return interface{} -func (c *cache) Get(key string) interface{} { +// @method Get +// @description: 获取指定缓存 +// @receiver c +// @param key string 缓存key +// @return interface{} +func (c *cache) Get(key string) (interface{}, error) { result, err := c.client.Get(c.ctx, key).Result() if err != nil { - panic("get cache by " + key + " failed: " + err.Error()) + return nil, errors.New("NOT FOUND " + key) } - return result + return result, nil } -// @method Delete -// @description: 删除指定缓存 -// @receiver c -// @param keys ...string -// @return int -func (c *cache) Delete(keys ...string) int64 { +// @method Delete +// @description: 删除指定缓存 +// @receiver c +// @param keys ...string +// @return int +func (c *cache) Delete(keys ...string) (int64, error) { result, err := c.client.Del(c.ctx, keys...).Result() if err != nil { - panic("delete cache failed: " + err.Error()) + return 0, errors.New("DELETE CACHE FAILED " + err.Error()) } - return result + return result, nil } -// @method HPut -// @description: hash put -// @receiver c -// @param key string -// @param value ...interface{} -// @return error +// @method HPut +// @description: hash put +// @receiver c +// @param key string +// @param value ...interface{} +// @return error func (c *cache) HPut(key string, value ...interface{}) error { _, err := c.client.HSet(c.ctx, key, value...).Result() return err } -// @method HMPut -// @description: hash put 用来兼容redis v3 -// @receiver c -// @param key string -// @param value interface{} -// @return error +// @method HMPut +// @description: hash put 用来兼容redis v3 +// @receiver c +// @param key string +// @param value interface{} +// @return error func (c *cache) HMPut(key string, value ...interface{}) error { _, err := c.client.HMSet(c.ctx, key, value).Result() return err } -// @method HKeyExist -// @description: 判断hash表中的key是否存在 -// @receiver c -// @param key string -// @return bool +// @method HKeyExist +// @description: 判断hash表中的key是否存在 +// @receiver c +// @param key string +// @return bool func (c *cache) HKeyExist(key, field string) bool { result, err := c.client.HExists(c.ctx, key, field).Result() @@ -229,109 +230,109 @@ func (c *cache) HKeyExist(key, field string) bool { } -// @method HGet -// @description: 获取hash表中指定key,field的值 -// @receiver c -// @param key string -// @param field string -// @return interface{} -func (c *cache) HGet(key, field string) interface{} { +// @method HGet +// @description: 获取hash表中指定key,field的值 +// @receiver c +// @param key string +// @param field string +// @return interface{} +func (c *cache) HGet(key, field string) (interface{}, error) { result, err := c.client.HGet(c.ctx, key, field).Result() if err != nil { - panic("get key : " + key + " from hash filed: " + field + " failed: " + err.Error()) + return nil, errors.New("GET HASH CACHE FAILED " + err.Error()) } - return result + return result, nil } -// @method HGetAll -// @description: 获取hash表中的全部数据 -// @receiver c -// @param key string -// @return interface{} -func (c *cache) HGetAll(key string) map[string]string { +// @method HGetAll +// @description: 获取hash表中的全部数据 +// @receiver c +// @param key string +// @return interface{} +func (c *cache) HGetAll(key string) (map[string]string, error) { result, err := c.client.HGetAll(c.ctx, key).Result() if err != nil { - panic("get hash by key: " + key + " failed: " + err.Error()) + return nil, errors.New("GET HASH CACHE ALL FAILED " + err.Error()) } - return result + return result, nil } -// @method HGetKeyAll -// @description: 获取hash表中的全部key -// @receiver c -// @param key string -func (c *cache) HGetKeyAll(key string) []string { +// @method HGetKeyAll +// @description: 获取hash表中的全部key +// @receiver c +// @param key string +func (c *cache) HGetKeyAll(key string) ([]string, error) { result, err := c.client.HKeys(c.ctx, key).Result() if err != nil { - panic("get hash all key failed :" + err.Error() + " by cache key :" + key) + return nil, errors.New("get hash all key failed :" + err.Error() + " by cache key :" + key) } - return result + return result, nil } -// @method HIncrBy -// @description: 为哈希表 key 中的指定字段的整数值加上增量 increment -// @receiver c -// @param key string -// @param field string -// @param incr int64 -func (c *cache) HIncrBy(key, field string, incr int64) int64 { +// @method HIncrBy +// @description: 为哈希表 key 中的指定字段的整数值加上增量 increment +// @receiver c +// @param key string +// @param field string +// @param incr int64 +func (c *cache) HIncrBy(key, field string, incr int64) (int64, error) { result, err := c.client.HIncrBy(c.ctx, key, field, incr).Result() if err != nil { - panic("hash incr by failed: " + err.Error()) + return 0, errors.New("hash incr by failed: " + err.Error()) } - return result + return result, nil } -// @method HFloatIncrBy -// @description: 为哈希表 key 中的指定字段的浮点数值加上增量 increment -// @receiver c -// @param key string -// @param field string -// @param incr float64 -// @return float64 -func (c *cache) HFloatIncrBy(key, field string, incr float64) float64 { +// @method HFloatIncrBy +// @description: 为哈希表 key 中的指定字段的浮点数值加上增量 increment +// @receiver c +// @param key string +// @param field string +// @param incr float64 +// @return float64 +func (c *cache) HFloatIncrBy(key, field string, incr float64) (float64, error) { result, err := c.client.HIncrByFloat(c.ctx, key, field, incr).Result() if err != nil { - panic("hash incr float by failed: " + err.Error()) + return 0, errors.New("hash incr float by failed: " + err.Error()) } - return result + return result, nil } -// @method HGetValAll -// @description: 获取hash表中全部的value 值 -// @receiver c -// @param key string -func (c *cache) HGetValAll(key string) []string { +// @method HGetValAll +// @description: 获取hash表中全部的value 值 +// @receiver c +// @param key string +func (c *cache) HGetValAll(key string) ([]string, error) { result, err := c.client.HVals(c.ctx, key).Result() if err != nil { - panic("get hash all value failed: " + err.Error()) + return nil, errors.New("get hash all value failed: " + err.Error()) } - return result + return result, nil } -// @method HDelete -// @description: 删除hash表中一个或多个字段 -// @receiver c -// @param key string -// @param fields ...string -func (c *cache) HDelete(key string, fields ...string) int64 { +// @method HDelete +// @description: 删除hash表中一个或多个字段 +// @receiver c +// @param key string +// @param fields ...string +func (c *cache) HDelete(key string, fields ...string) (int64, error) { result, err := c.client.HDel(c.ctx, key, fields...).Result() if err != nil { - panic("delete hash filed failed: " + err.Error()) + return 0, errors.New("delete hash filed failed: " + err.Error()) } - return result + return result, nil } diff --git a/go.mod b/go.mod index 3dab54e..40e6d23 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,9 @@ module github.com/cowardmrx/rds_cache_go go 1.17 +require github.com/go-redis/redis/v8 v8.11.4 + require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/go-redis/redis/v8 v8.11.4 // indirect )