Feat: redis driver for cache

This commit is contained in:
HFO4
2019-12-09 15:20:02 +08:00
parent f6da4cc7f0
commit cb61945125
7 changed files with 315 additions and 18 deletions

55
pkg/cache/driver.go vendored
View File

@@ -1,10 +1,63 @@
package cache
import (
"github.com/HFO4/cloudreve/pkg/conf"
"github.com/gin-gonic/gin"
)
// Store 缓存存储器
var Store Driver = NewMemoStore()
var Store Driver
func init() {
Store = NewRedisStore(10, "tcp", "127.0.0.1:6379", "", "0")
return
if conf.RedisConfig.Server == "" || gin.Mode() == gin.TestMode {
Store = NewMemoStore()
} else {
Store = NewRedisStore(10, "tcp", conf.RedisConfig.Server, conf.RedisConfig.Password, conf.RedisConfig.DB)
}
}
// Driver 键值缓存存储容器
type Driver interface {
// 设置值
Set(key string, value interface{}) error
// 取值
Get(key string) (interface{}, bool)
// 批量取值返回成功取值的map即不存在的值
Gets(keys []string, prefix string) (map[string]interface{}, []string)
// 批量设置值
Sets(values map[string]interface{}, prefix string) error
}
// Set 设置缓存值
func Set(key string, value interface{}) error {
return Store.Set(key, value)
}
// Get 获取缓存值
func Get(key string) (interface{}, bool) {
return Store.Get(key)
}
// GetsSettingByName 根据名称批量获取设置项缓存
func GetsSettingByName(keys []string) (map[string]string, []string) {
raw, miss := Store.Gets(keys, "setting_")
res := make(map[string]string, len(raw))
for k, v := range raw {
res[k] = v.(string)
}
return res, miss
}
// SetSettings 批量设置站点设置缓存
func SetSettings(values map[string]string) error {
var toBeSet = make(map[string]interface{}, len(values))
for key, value := range values {
toBeSet[key] = interface{}(value)
}
return Store.Sets(toBeSet, "setting_")
}