This commit is contained in:
2021-09-17 11:16:38 +08:00
parent c43ebcd5dd
commit 7833a2234c
28 changed files with 1831 additions and 0 deletions

17
pkg/cache/manager.go vendored Normal file
View 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
View 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
View 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
}