commit
This commit is contained in:
17
pkg/cache/manager.go
vendored
Normal file
17
pkg/cache/manager.go
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
package cache
|
||||
|
||||
// Manager 管理缓存的接口定义
|
||||
type Manager interface {
|
||||
// Set 设置缓存
|
||||
Set(key string, value interface{}) error
|
||||
// SetDefault 设置缓存
|
||||
SetDefault(key string, value interface{}, expire int64) error
|
||||
// Get 获取缓存
|
||||
Get(key string) (interface{}, error)
|
||||
// GetString 获取缓存
|
||||
GetString(key string) (string, error)
|
||||
// Exists key是否存在
|
||||
Exists(key string) bool
|
||||
// Delete 删除key
|
||||
Delete(key string) error
|
||||
}
|
||||
70
pkg/cache/memory_manager.go
vendored
Normal file
70
pkg/cache/memory_manager.go
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/patrickmn/go-cache"
|
||||
)
|
||||
|
||||
// MemoryManager memory缓存管理
|
||||
type MemoryManager struct {
|
||||
cache *cache.Cache
|
||||
}
|
||||
|
||||
// NewMemoryManager 获取一个新的内存管理对象
|
||||
// defaultExpiration 缓存过期时间
|
||||
// cleanupInterval 缓存清理时间
|
||||
func NewMemoryManager(defaultExpiration, cleanupInterval time.Duration) Manager {
|
||||
return &MemoryManager{cache: cache.New(defaultExpiration, cleanupInterval)}
|
||||
}
|
||||
|
||||
// Set 设置缓存
|
||||
// key 键
|
||||
// value 值
|
||||
func (manager *MemoryManager) Set(key string, value interface{}) error {
|
||||
manager.cache.Set(key, value, time.Hour*24*365*100) // 10年
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetDefault 设置缓存
|
||||
// key 键
|
||||
// value 值
|
||||
// expire 过期时间 (秒)
|
||||
func (manager *MemoryManager) SetDefault(key string, value interface{}, expire int64) error {
|
||||
manager.cache.Set(key, value, time.Second*time.Duration(expire))
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get 获取缓存
|
||||
func (manager *MemoryManager) Get(key string) (interface{}, error) {
|
||||
value, found := manager.cache.Get(key)
|
||||
if found {
|
||||
return value, nil
|
||||
}
|
||||
return nil, errors.New("no found data with key")
|
||||
}
|
||||
|
||||
// GetString 获取缓存
|
||||
func (manager *MemoryManager) GetString(key string) (string, error) {
|
||||
value, found := manager.cache.Get(key)
|
||||
if found {
|
||||
return fmt.Sprintf("%v", value), nil
|
||||
}
|
||||
return "", errors.New("no found data with key")
|
||||
}
|
||||
|
||||
// Exists key是否存在
|
||||
func (manager *MemoryManager) Exists(key string) bool {
|
||||
if _, found := manager.cache.Get(key); found {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// Delete 删除key
|
||||
func (manager *MemoryManager) Delete(key string) error {
|
||||
manager.cache.Delete(key)
|
||||
return nil
|
||||
}
|
||||
135
pkg/cache/redis_manager.go
vendored
Normal file
135
pkg/cache/redis_manager.go
vendored
Normal file
@@ -0,0 +1,135 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user