package RedisUtil import ( "dsSso/Const/ErrorConst" "dsSso/Utils/ConfigUtil" "dsSso/Utils/LogUtil" "fmt" garybudRedis "github.com/garyburd/redigo/redis" "github.com/go-redis/redis/v7" "github.com/sirupsen/logrus" "time" ) var ( // 定义redis链接池 RedisClient *redis.Client //这个是为了使用OAuth2类库,引入的redis池,也是没办法之举~ Pool *garybudRedis.Pool ) func init() { // 从配置文件获取redis的ip以及db var redisHost = ConfigUtil.RedisIp + ":" + ConfigUtil.RedisPort Pool = &garybudRedis.Pool{ Dial: func() (garybudRedis.Conn, error) { conn, err := garybudRedis.Dial("tcp", redisHost) if err != nil { return nil, err } return conn, nil }, } //这个是以后项目中广泛使用的redis池 RedisClient = redis.NewClient(&redis.Options{ Addr: redisHost, // Redis地址 Password: "", // Redis账号 DB: 0, // Redis库 PoolSize: 100, // Redis连接池大小 MaxRetries: 3, // 最大重试次数 IdleTimeout: 10 * time.Second, // 空闲链接超时时间 }) _, err := RedisClient.Ping().Result() if err == redis.Nil { LogUtil.Error(ErrorConst.CreateRedisError, "Redis异常") } else if err != nil { LogUtil.Error(ErrorConst.CreateRedisError, err.Error()) } } func FlushAll() { RedisClient.FlushAll() } //======下面的代码由黄海增加于2020-02-18============================================================= /** 功能:获取redis中的Hash缓存 作者:黄海 时间:2020-02-18 */ func HGETALL(key string) map[string]interface{} { _map, err := RedisClient.HGetAll(key).Result() n := make(map[string]interface{}) for k, v := range _map { n[k] = interface{}(v) } if err == nil { return n } return nil } /** 功能:设置hash值 作者:黄海 时间:2020-02-18 */ func HSET(key string, value interface{}) { RedisClient.HSet(key, value) } /** 功能:获取hash值 作者:黄海 时间:2020-02-18 */ func HGET(key string, field string) *redis.StringCmd { return RedisClient.HGet(key, field) } /** 功能:设置hash值 作者:黄海 时间:2020-02-18 */ func HMSET(key string, m map[string]interface{}) { RedisClient.HMSet(key, m) } /** 功能:设置多个hash值 作者:黄海 时间:2020-02-18 */ func HMGET(key string, fields ...string) map[string]interface{} { resMap := make(map[string]interface{}) for _, field := range fields { var result interface{} val, err := RedisClient.HGet(key, fmt.Sprintf("%s", field)).Result() if err == redis.Nil { logrus.Errorln("Key Doesn't Exists:", field) resMap[field] = result } else if err != nil { logrus.Errorln("Redis HMGet Error:", err) resMap[field] = result } if val != "" { resMap[field] = val } else { resMap[field] = result } } return resMap } /** 功能:设置指定键值的过期时间 作者:黄海 时间:2020-02-18 */ func EXPIRE(key string, ttl time.Duration) { RedisClient.Expire(key, ttl) } /** 功能:是否存在指定的键值 作者:黄海 时间:2020-03-18 */ func EXISTS(key string) (int64, error) { return RedisClient.Exists(key).Result() } /** 功能:设置指定键值的过期时间 作者:黄海 时间:2020-02-18 */ func DEL(key string) { RedisClient.Del(key) } /** 功能:设置一个STRING形式的缓存 作者:黄海 时间:2020-02-25 */ func SET(key string, value string, ttl time.Duration) { RedisClient.Set(key, value, ttl) } /** 功能:获取指定的KEY值 作者:黄海 时间:2020-02-25 */ func GET(key string) (string, error) { var r = RedisClient.Get(key) if r.Err() != nil { return "", r.Err() } else { return r.Result() } }