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

以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)

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

图片描述

图片描述

阅读 3.6k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题