Golang Beego 使用 Token 在 Redis 中存储和读取不同数据
Golang Beego 使用 Token 在 Redis 中存储和读取不同数据
本文探讨了在 Golang Beego 框架中,如何使用同一个 Token 在 Redis 中存储和读取不同的数据。
问题:
假设你有一个接口用于存储数据到 Redis,另一个接口用于读取存储的数据。如果这两个接口都使用同一个 Token,是否可以存储和读取不同的数据?
答案:
是的,可以通过 Token 来取不同的值,因为每一个 Token 对应的值都是不同的。但建议不要重复使用一个 Token,因为可能会出现覆盖的情况。
解决方案:
存储接口:
func (this *NoticeDetectionCtl) OnHandleLoadingTime() {
commonInfo := fmt.Sprintf("HandleLoadingTime, Id = %d ", this.Session.Id)
msg := map[string]interface{}{'is_start': 1}
data, _ := json.Marshal(&msg)
err := dao.RedisSetKey(this.Token, string(data), config.TokenExp)
if err != nil {
logs.Error("%s, err = %v", commonInfo, err)
this.OnError(errno.EC_InnerError, errno.EM_InnerError)
return
}
this.OnSuccess(nil)
}
读取接口:
func (this *NoticeDetectionCtl) OnHandleLoadingTime() {
commonInfo := fmt.Sprintf("HandleLoadingTime, Id = %d ", this.Session.Id)
data, err := dao.RedisGetKey(this.Token)
if err != nil || data == ""
logs.Error("%s, data = %s, err = %v, invalid", commonInfo, data, err)
_ = dao.RedisDelKey(this.Token)
this.OnError(errno.EC_NotFound, errno.EM_NotFound)
return
}
var flag map[string]int
err = json.Unmarshal([]byte(data), &flag)
if err != nil {
logs.Error("%s, err = %v", commonInfo, err)
return
}
isStart, ok := flag['is_start']
if !ok {
logs.Error("%s, is_start not found", commonInfo)
return
}
this.OnSuccess(map[string]interface{}{'is_start': isStart})
}
建议:
- 不要重复使用同一个 Token,建议为不同数据使用不同的 Token。
- 在存储和读取数据时,务必加上错误处理,以确保程序的健壮性。
总结:
通过使用 Token 作为键值,可以在 Redis 中存储和读取不同的数据。但需要注意避免重复使用同一个 Token 以及错误处理。
原文地址: https://www.cveoy.top/t/topic/oUl6 著作权归作者所有。请勿转载和采集!