beego cache redis json 取出来json对象有哪些方式?

发布于 2022-09-11 22:02:17 字数 1554 浏览 17 评论 0

以json字符串存入redis中的数据取出来需要json.Unmarshal()反解析吗? 为啥解析不出来

问题出现的环境背景及自己尝试过哪些方法

cache.GetString(cache_con.Get("aaa")
这种方式取出来的是图3 我想取出来像图2一样json.Marshal()函数执行前的数据

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

 resp :=make(map[string]interface{})
resp["errno"] = models.RECODE_OK
resp["errmsg"] = models.RecodeText(models.RECODE_OK)
defer c.RetData(resp)
cache_con, err := cache.NewCache("redis",`{"key":"lovehome","conn":":6379","dbNum":"0","password":""}`)

if areaData := cache_con.Get("area"); areaData !=nil {
    beego.Info("get data from cache===========",areaData.([]uint8))
    resp["data"]=areaData.([]uint8);
    
    return
}
//beego.Info("cache success",string(cache_con.Get("aaa").([]byte)))
//beego.Info("cache s",cache.GetString(cache_con.Get("aaa")))
//从mysql数据库拿到area数据
var areas  []models.Area
o :=orm.NewOrm()
num,err :=o.QueryTable("area").All(&areas)

if err !=nil {
    beego.Info("数据库错误")
    resp["error"]=400
    resp["errmsg"]="失败"
    c.RetData(resp)
    return
}
if num==0 {
    resp["error"]=400
    resp["errmsg"]="没有查到数据"

    return
}

resp["data"]=areas
json_str,err :=json.Marshal(areas)

if err !=nil {
    beego.Info("json err")
    return 
}
errCache :=cache_con.Put("area",json_str,time.Second*3600)

if errCache !=nil{
    beego.Error("cache err")
}

beego.Info("resp",resp,"num",num)

你期待的结果是什么?实际看到的错误信息又是什么?

图片描述

图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

杯别 2022-09-18 22:02:17

是不是因为json.Marshl()的返回类型不是字符串, 返回的是[]byte, 存的时候应该使用string(json_str)转成字符串后再存, 取得时候转成byte后反序列化json.Unmarshal([]byte(cacheStr), &areas)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文