分享
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
```
//GetHMapData 从数据库获取数据
type GetHMapData interface {
RedisKey() string
LoadDb() error
// SaveCache() error
}
//LoadCache 从缓存获取数据
func LoadCache(hd GetHMapData) error {
cli := redis.GetCacheConn()
bookMap := cli.HGetAll(hd.RedisKey()).Val()
return redis.CoverMapToStruct(bookMap, &hd)
}
//GetData 获取数据
func GetData(hd GetHMapData) error {
if err := LoadCache(hd); err != nil {
log.Log.Errorf("load db err:", err)
if err := hd.LoadDb(); err != nil {
return err
}
SaveCache(hd)
}
return nil
}
//SaveCache 将Hmap存入redis
func SaveCache(u GetHMapData) error {
uMap, err := redis.StructToMap(u)
if err != nil || uMap == nil {
log.Log.Errorf("保存缓存数据出错:%v", err)
return err
}
cli := redis.GetCacheConn()
err = cli.HMSet(u.RedisKey(), uMap).Err()
if err != nil {
log.Log.Errorf("保存缓存数据出错:%v", err)
return err
}
cli.Expire(u.RedisKey(), constent.DefaultExpire)
return nil
}
```
想实现一个接口,完成从数据库查数据,取不到就查数据库的功能
这个是redis这边两个函数的实现
```
//CoverMapToStruct 将redis取出的数据转成简单结构体
func CoverMapToStruct(data map[string]string, s interface{}) error {
buf, err := json.Marshal(data)
if err != nil {
return err
}
return json.Unmarshal(buf, s)
}
//StructToMap 将结构体转成map存入redis
func StructToMap(s interface{}) (map[string]interface{}, error) {
buf, err := json.Marshal(s)
if err != nil {
return nil, err
}
dest := make(map[string]interface{})
err = json.Unmarshal(buf, &dest)
if err != nil {
return nil, err
}
return dest, nil
}
```
现在无法实现该功能,求指教我这个思路哪里出错了?
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信1005 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传