1 Star 0 Fork 0

h79/goutils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
cache.go 1.20 KB
一键复制 编辑 原始数据 按行查看 历史
huqiuyun 提交于 2023-07-08 16:35 . modified name
package loader
import (
"context"
"gitee.com/h79/goutils/dao"
)
type Cache struct {
Loader
cacheLoader CacheLoadFunc
dao *dao.Dao
key string
da interface{}
}
type CacheLoadFunc func(dao *dao.Dao, opt *CacheOption) error
type CacheOption struct {
Key string
Data interface{}
}
func NewCache(key string, dao *dao.Dao, data interface{}) *Loader {
cache := &Cache{
Loader: CreateLoader(),
dao: dao,
key: key,
da: data,
}
return cache.WithLoadFunc(cache.load)
}
func (ca *Cache) WithCacheLoadFunc(fn CacheLoadFunc) *Cache {
ca.cacheLoader = fn
return ca
}
func (ca *Cache) load() (interface{}, error) {
if ca.cacheLoader != nil {
opt := CacheOption{
Key: ca.key,
Data: ca.da,
}
err := ca.cacheLoader(ca.dao, &opt)
if err != nil {
return nil, err
}
return opt.Data, nil
}
return ca.defaultLoad()
}
func (ca *Cache) defaultLoad() (interface{}, error) {
client, err := ca.dao.RedisClient()
if err != nil {
return ca.da, err
}
ret, err := client.Get(context.Background(), ca.key).Result()
if err != nil {
return ca.da, err
}
if err = ca.unmarshal.Unmarshal([]byte(ret), ca.da); err != nil {
return ca.da, err
}
return ca.da, nil
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/h79/goutils.git
git@gitee.com:h79/goutils.git
h79
goutils
goutils
v1.20.85

搜索帮助

A270a887 8829481 3d7a4017 8829481