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 以及错误处理。

Golang Beego 使用 Token 在 Redis 中存储和读取不同数据

原文地址: https://www.cveoy.top/t/topic/oUl6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录