@ -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) | |||||
} |