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