| @ -0,0 +1,101 @@ | |||||
| package redis | |||||
| import ( | |||||
| redisdb "github.com/gomodule/redigo/redis" | |||||
| ) | |||||
| // 定义redis链接池 | |||||
| var pool *redisdb.Pool | |||||
| // 初始化redis链接池 | |||||
| func init() { | |||||
| pool = &redisdb.Pool{ | |||||
| MaxIdle: 500, /*最大的空闲连接数*/ | |||||
| MaxActive: 10000, /*最大的激活连接数*/ | |||||
| Dial: conn, | |||||
| } | |||||
| } | |||||
| func conn() (redisdb.Conn, error) { | |||||
| c, err := redisdb.Dial("tcp", "127.0.0.1:6379") | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } | |||||
| return c, nil | |||||
| } | |||||
| // // 向key的hash中添加元素field的值 | |||||
| // func HashSet(key, field string, data interface{}) { | |||||
| // err := client.HSet(key, field, data) | |||||
| // if err != nil { | |||||
| // logger.Error("Redis HSet Error:", err) | |||||
| // } | |||||
| // } | |||||
| // // 批量向key的hash添加对应元素field的值 | |||||
| // func BatchHashSet(key string, fields map[string]interface{}) string { | |||||
| // val, err := client.HMSet(key, fields).Result() | |||||
| // if err != nil { | |||||
| // logger.Error("Redis HMSet Error:", err) | |||||
| // } | |||||
| // return val | |||||
| // } | |||||
| // // 通过key获取hash的元素值 | |||||
| // func HashGet(key, field string) string { | |||||
| // result := "" | |||||
| // val, err := client.HGet(key, field).Result() | |||||
| // if err == redis.Nil { | |||||
| // logger.Debug("Key Doesn't Exists:", field) | |||||
| // return result | |||||
| // } else if err != nil { | |||||
| // logger.Error("Redis HGet Error:", err) | |||||
| // return result | |||||
| // } | |||||
| // return val | |||||
| // } | |||||
| // // 批量获取key的hash中对应多元素值 | |||||
| // func BatchHashGet(key string, fields ...string) map[string]interface{} { | |||||
| // resMap := make(map[string]interface{}) | |||||
| // for _, field := range fields { | |||||
| // var result interface{} | |||||
| // val, err := client.HGet(key, fmt.Sprintf("%s", field)).Result() | |||||
| // if err == redis.Nil { | |||||
| // logger.Debug("Key Doesn't Exists:", field) | |||||
| // resMap[field] = result | |||||
| // } else if err != nil { | |||||
| // logger.Error("Redis HMGet Error:", err) | |||||
| // resMap[field] = result | |||||
| // } | |||||
| // if val != "" { | |||||
| // resMap[field] = val | |||||
| // } else { | |||||
| // resMap[field] = result | |||||
| // } | |||||
| // } | |||||
| // return resMap | |||||
| // } | |||||
| // // 获取自增唯一ID | |||||
| // func Incr(key string) int { | |||||
| // val, err := client.Incr(key).Result() | |||||
| // if err != nil { | |||||
| // logger.Error("Redis Incr Error:", err) | |||||
| // } | |||||
| // return int(val) | |||||
| // } | |||||
| // // 添加集合数据 | |||||
| // func SetAdd(key, val string) { | |||||
| // client.SAdd(key, val) | |||||
| // } | |||||
| // // 从集合中获取数据 | |||||
| // func SetGet(key string) []string { | |||||
| // val, err := client.SMembers(key).Result() | |||||
| // if err != nil { | |||||
| // logger.Error("Redis SMembers Error:", err) | |||||
| // } | |||||
| // return val | |||||
| // } | |||||
| @ -0,0 +1,18 @@ | |||||
| package redis | |||||
| import ( | |||||
| "testing" | |||||
| ) | |||||
| func Test_SetAdd(t *testing.T) { | |||||
| reply, err := Set(123, "不知道433ee4") | |||||
| t.Log(reply) | |||||
| t.Log(err) | |||||
| ret, err := Get("123") | |||||
| t.Log(ret) | |||||
| t.Log(err) | |||||
| } | |||||
| @ -0,0 +1,127 @@ | |||||
| package redis | |||||
| import ( | |||||
| // "errors" | |||||
| redisdb "github.com/gomodule/redigo/redis" | |||||
| ) | |||||
| //hash取值, 返回interface{} | |||||
| func HGet(key string, field interface{}) (interface{}, error) { | |||||
| c := pool.Get() | |||||
| defer c.Close() | |||||
| return c.Do("HGET", key, field) | |||||
| } | |||||
| //hash取值, 返回字符串 | |||||
| func HGetString(key string, field interface{}) (string, error) { | |||||
| c := pool.Get() | |||||
| defer c.Close() | |||||
| ret, err := c.Do("HGET", key, field) | |||||
| if err != nil { | |||||
| return "", err | |||||
| } | |||||
| return redisdb.String(ret, err) | |||||
| } | |||||
| //hash取值,返回接口类型 | |||||
| func HGetStringMap(key string, field interface{}) (map[string]string, error) { | |||||
| c := pool.Get() | |||||
| defer c.Close() | |||||
| ret, err := c.Do("HGET", key, field) | |||||
| if err != nil { | |||||
| return ret.(map[string]string), err | |||||
| } | |||||
| return redisdb.StringMap(ret, err) | |||||
| } | |||||
| //hash取值,返回[]byte | |||||
| func HGetBytes(key string, field interface{}) ([]byte, error) { | |||||
| c := pool.Get() | |||||
| defer c.Close() | |||||
| ret, err := c.Do("HGET", key, field) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } | |||||
| return redisdb.Bytes(ret, err) | |||||
| } | |||||
| //hash取所有值 | |||||
| func HGetAll(key string) ([][]byte, error) { | |||||
| c := pool.Get() | |||||
| defer c.Close() | |||||
| ret, err := c.Do("HGETAll", key) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } | |||||
| // return ret, err | |||||
| // return redisdb.MultiBulk(ret, err) | |||||
| return redisdb.ByteSlices(ret, err) | |||||
| } | |||||
| /* | |||||
| * hash存值, | |||||
| * key 域 | |||||
| * field 名 | |||||
| * value 值 | |||||
| * 2020/06/06 | |||||
| */ | |||||
| func HSet(key string, field, value interface{}) (interface{}, error) { | |||||
| c := pool.Get() | |||||
| defer c.Close() | |||||
| reply, err := c.Do("HSET", key, field, value) | |||||
| return reply, err | |||||
| } | |||||
| /* | |||||
| * 删除hash值 | |||||
| */ | |||||
| func HDel(key,field string) error{ | |||||
| c := pool.Get() | |||||
| defer c.Close() | |||||
| _, err := c.Do("HDEL", key, field) | |||||
| return err | |||||
| } | |||||
| /* | |||||
| * hash批量存值, | |||||
| * args (key,field,value,field,value,field,value...) 域,名,值,名,值,名,值 ... | |||||
| * 2020/06/06 | |||||
| */ | |||||
| func HMSet(args ...interface{}) (interface{}, error) { | |||||
| c := pool.Get() | |||||
| defer c.Close() | |||||
| reply, err := c.Do("HMSET", args...) | |||||
| return reply, err | |||||
| } | |||||
| /* | |||||
| * hash存值, | |||||
| * key 域 | |||||
| * expire 过期时长 | |||||
| * 2020/06/06 | |||||
| */ | |||||
| func HSetExpire(key string, expire int) (interface{}, error) { | |||||
| c := pool.Get() | |||||
| defer c.Close() | |||||
| return c.Do("expire", key, expire) | |||||
| } | |||||
| @ -0,0 +1,40 @@ | |||||
| package redis | |||||
| import ( | |||||
| // "strconv" | |||||
| "testing" | |||||
| // "tgo/helper" | |||||
| ) | |||||
| func Test_HSet(t *testing.T) { | |||||
| // val := map[string]interface{}{"id": "123", "name": "这是一个测试", "dis": "xxx"} | |||||
| // reply, err := HSet("testing2", "test1", val) | |||||
| // t.Log(reply) | |||||
| // t.Log(err) | |||||
| // ret, err := HGetString("testing2", "test1") | |||||
| // t.Log(ret) | |||||
| // t.Log(err) | |||||
| // ret2, err := HSetExpire("testing2", 200) | |||||
| // t.Log(ret2) | |||||
| // t.Log(err) | |||||
| // ret3, err := HMSet("testing2", "test1", "test1", "test2", "test2", "test3", "test3") | |||||
| // t.Log(ret3) | |||||
| // t.Log(err) | |||||
| ret4, err := HGetAll("1000064_product") | |||||
| // ret := ret4.([]interface{}) | |||||
| // t.Log() | |||||
| for _, val := range ret4 { | |||||
| // str := strconv.FormatUint(val.([]uint64), 10) | |||||
| // t.Log(helper.ToStr(val)) | |||||
| t.Log(string(val)) | |||||
| } | |||||
| t.Log(err) | |||||
| } | |||||
| @ -0,0 +1,77 @@ | |||||
| package redis | |||||
| import ( | |||||
| "errors" | |||||
| redisdb "github.com/gomodule/redigo/redis" | |||||
| ) | |||||
| //取值 | |||||
| func Get(key string) (string, error) { | |||||
| c := pool.Get() | |||||
| defer c.Close() | |||||
| return redisdb.String(c.Do("get", key)) | |||||
| } | |||||
| /* | |||||
| * 存值, | |||||
| * args,范围(key, value)或(key, value,expire) | |||||
| * 2020/06/06 | |||||
| */ | |||||
| func Set(args ...interface{}) (interface{}, error) { | |||||
| c := pool.Get() | |||||
| defer c.Close() | |||||
| if len(args) < 2 { | |||||
| return nil, errors.New("参数错误,至少需两个参数") | |||||
| } | |||||
| var err error | |||||
| var reply interface{} | |||||
| if len(args) > 2 { | |||||
| reply, err = c.Do("SET", args[0], args[1], "EX", args[2]) //设置过期时间 | |||||
| } else { | |||||
| reply, err = c.Do("SET", args[0], args[1]) | |||||
| } | |||||
| return reply, err | |||||
| } | |||||
| /** | |||||
| * 删除key | |||||
| */ | |||||
| func Del(key string) (int,error){ | |||||
| c := pool.Get() | |||||
| defer c.Close() | |||||
| var err error | |||||
| var reply interface{} | |||||
| reply, err = c.Do("DEL", key) | |||||
| return redisdb.Int(reply, err) | |||||
| } | |||||
| /** | |||||
| * 设锁 | |||||
| * 2020/01/15 | |||||
| */ | |||||
| func SetLock(args ...interface{}) (bool,error){ | |||||
| c := pool.Get() | |||||
| defer c.Close() | |||||
| if len(args) < 2 { | |||||
| return false, errors.New("参数错误,至少需两个参数") | |||||
| } | |||||
| var err error | |||||
| var result interface{} | |||||
| if len(args) > 2 { | |||||
| result, err = c.Do("SETNX", args[0], args[1], "EX", args[2]) //设置过期时间 | |||||
| } else { | |||||
| result, err = c.Do("SETNX", args[0], args[1]) | |||||
| } | |||||
| if err != nil{ | |||||
| return false,err | |||||
| } | |||||
| if result.(int) == 1{ | |||||
| return true, nil | |||||
| } else{ | |||||
| return false, nil | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,21 @@ | |||||
| package redis | |||||
| import ( | |||||
| "testing" | |||||
| // "time" | |||||
| ) | |||||
| func Test_Get(t *testing.T) { | |||||
| reply, err := Get("siteListCache") | |||||
| t.Log(reply) | |||||
| t.Log(err) | |||||
| } | |||||
| func Test_Set(t *testing.T) { | |||||
| c, err := Set("test", 1111, 7200) | |||||
| t.Log(c) | |||||
| t.Log(err) | |||||
| } | |||||