package RedisUtil import ( "dsBaseWeb/Utils/ConfigUtil" "fmt" "github.com/gomodule/redigo/redis" "github.com/sirupsen/logrus" "time" ) var ( // 定义常量 RedisClient *redis.Pool RedisHost string RedisDb string ) func init() { // 从配置文件获取redis的ip以及db RedisHost = ConfigUtil.RedisIp + ":" + ConfigUtil.RedisPort RedisDb = ConfigUtil.RedisDb // 建立连接池 RedisClient = &redis.Pool{ MaxIdle: 100, MaxActive: 100, IdleTimeout: 180 * time.Second, Dial: func() (redis.Conn, error) { c, err := redis.Dial("tcp", RedisHost) if err != nil { return nil, err } // 选择db c.Do("SELECT", RedisDb) return c, nil }, } } //======下面的代码由黄海增加于2020-02-18============================================================= /** 功能:获取redis中的Hash缓存 作者:黄海 时间:2020-02-18 */ func HGETALL(key string) map[string]interface{} { //申请连接 c := RedisClient.Get() _map := make(map[string]interface{}) result, err := redis.Values(c.Do("hgetall", key)) if err != nil { logrus.Errorln("hgetall failed", err.Error()) return _map } else { //奇数是key, 偶数是value for i := 0; i < len(result); i = i + 2 { k := fmt.Sprintf("%s", result[i].([]byte)) v := fmt.Sprintf("%s", result[i+1].([]byte)) _map[k] = v } } //归还连接池 c.Close() return _map } /** 功能:设置hash值 作者:黄海 时间:2020-02-18 */ func HMSET(key string, m map[string]interface{}) error { //申请连接 c := RedisClient.Get() _, err := c.Do("hmset", redis.Args{}.Add(key).AddFlat(m)...) if err != nil { logrus.Errorln("hmset error", err.Error()) } //归还连接池 c.Close() return err } /** 功能:设置指定键值的过期时间 作者:黄海 时间:2020-02-18 */ func EXPIRE(key string) error { //申请连接 c := RedisClient.Get() _, err := c.Do("EXPIRE", key, ConfigUtil.RedisExpireTime) if err != nil { logrus.Errorln("hmset error", err.Error()) } //归还连接池 c.Close() return err } /** 功能:设置指定键值的过期时间 作者:黄海 时间:2020-02-18 */ func DEL(key string) error { //申请连接 c := RedisClient.Get() _, err := c.Do("DEL", key) if err != nil { logrus.Errorln("DEL error", err.Error()) } //归还连接池 c.Close() return err } /** 功能:从一个列表中获取指定的个数数据 作者:黄海 时间:2020-02-23 */ func LRANGE(key string, start int, stop int) ([]string, error) { //申请连接 c := RedisClient.Get() result, err := redis.Values(c.Do("LRANGE", key, start, stop)) if err != nil { logrus.Errorln("lrange error", err.Error()) } var resultArray []string for i := 0; i < len(result); i++ { k := fmt.Sprintf("%s", result[i].([]byte)) resultArray = append(resultArray, k) } //归还连接池 c.Close() return resultArray, err } /* 功能:删除指定索引之外的所有元素,注意删除之后保留的元素包含两端的start和end索引值。 作者:黄海 时间:2020-02-23 */ func LTRIM(key string, start int, stop int) error { //申请连接 c := RedisClient.Get() _, err := c.Do("LTRIM", key, start, stop) if err != nil { logrus.Errorln("LTRIM error", err.Error()) } //归还连接池 c.Close() return err } /** 功能:设置一个STRING形式的缓存 作者:黄海 时间:2020-02-25 */ func SET(key string, value string) error { //申请连接 c := RedisClient.Get() _, err := c.Do("SET", key, value) if err != nil { logrus.Errorln("SET error", err.Error()) } //归还连接池 c.Close() return err } /** 功能:判断指定的KEY值是不是存在 作者:黄海 时间:2020-02-25 */ func EXISTS(key string) (bool, error) { var rExists = false //申请连接 c := RedisClient.Get() result, err := redis.Int64(c.Do("EXISTS", key)) if err != nil { logrus.Errorln("SET error", err.Error()) } if result == 1 { rExists = true } else { rExists = false } //归还连接池 c.Close() return rExists, err } /** 功能:获取指定的KEY值 作者:黄海 时间:2020-02-25 */ func GET(key string) (string, error) { //申请连接 c := RedisClient.Get() value, err := redis.String(c.Do("GET", key)) if err != nil { value = "" logrus.Errorln("GET error", err.Error()) } //归还连接池 c.Close() return value, err }