|
|
package RedisUtil
|
|
|
|
|
|
import (
|
|
|
"dsBigData/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
|
|
|
}
|