gohelpers/pkg/cache/redis_manager.go
2021-09-17 11:16:38 +08:00

136 lines
3.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package cache
import (
"fmt"
"time"
"github.com/gomodule/redigo/redis"
)
// RedisManager redis缓存管理
type RedisManager struct {
pool *redis.Pool
}
// NewRedisManager 获取一个新的redis管理对象
func NewRedisManager(address string) Manager {
pool := &redis.Pool{
// 连接方法
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", address)
if err != nil {
return nil, err
}
c.Do("SELECT", 0)
return c, nil
},
//DialContext: nil,
//TestOnBorrow: nil,
MaxIdle: 10, // 最大的空闲连接数表示即使没有redis连接时依然可以保持N个空闲的连接而不被清除随时处于待命状态。
MaxActive: 10, // 最大的激活连接数表示同时最多有N个连接
IdleTimeout: 360 * time.Second, // 最大的空闲连接等待时间,超过此时间后,空闲连接将被关闭
//Wait: false,
//MaxConnLifetime: 0,
}
return &RedisManager{pool}
}
// Set 设置缓存
// key 键
// value 值
func (manager *RedisManager) Set(key string, value interface{}) error {
conn := manager.pool.Get()
defer conn.Close()
_, err := conn.Do("Set", key, value)
if err != nil {
return fmt.Errorf("set cache error: %v", err)
}
return nil
}
// SetDefault 设置缓存
// key 键
// value 值
// expire 过期时间 (秒)
func (manager *RedisManager) SetDefault(key string, value interface{}, expire int64) error {
conn := manager.pool.Get()
defer conn.Close()
//_, err := conn.Do("set", key, value)
//if err != nil {
// return fmt.Errorf("set default cache error: %v", err)
//}
//
//// 设置过期时间
//conn.Do("expire", key, expire)
//return nil
_, err := conn.Do("set", key, value, "ex", expire)
if err != nil {
return fmt.Errorf("set default cache error: %v", err)
}
return nil
}
// Get 获取缓存
func (manager *RedisManager) Get(key string) (interface{}, error) {
conn := manager.pool.Get()
defer conn.Close()
// 检查key是否存在
exit, err := redis.Bool(conn.Do("exists", key))
if err != nil || !exit {
return nil, fmt.Errorf("key is not exists")
}
value, err := conn.Do("get", key)
if err != nil {
return nil, fmt.Errorf("get cache error: %v", err)
}
return value, nil
}
// GetString 获取缓存
func (manager *RedisManager) GetString(key string) (string, error) {
conn := manager.pool.Get()
defer conn.Close()
// 检查key是否存在
exit, err := redis.Bool(conn.Do("exists", key))
if err != nil || !exit {
return "", fmt.Errorf("key is not exists")
}
value, err := redis.String(conn.Do("get", key))
if err != nil {
return "", fmt.Errorf("get cache error: %v", err)
}
return value, nil
}
// Exists key是否存在
func (manager *RedisManager) Exists(key string) bool {
conn := manager.pool.Get()
defer conn.Close()
// 检查key是否存在
exit, err := redis.Bool(conn.Do("expire", key))
if err != nil {
return false
}
return exit
}
// Delete 删除key
func (manager *RedisManager) Delete(key string) error {
conn := manager.pool.Get()
defer conn.Close()
_, err := conn.Do("del", key)
if err != nil {
return fmt.Errorf("删除key[%s]异常:%v", key, err)
}
return nil
}