You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

213 lines
4.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
}