为了账号安全,请及时绑定邮箱和手机立即绑定

将通用结构保存到 redis

将通用结构保存到 redis

Go
慕盖茨4494581 2023-05-15 14:59:54
在编写 golang 网络服务器时,我不得不使用某种缓存,所以我选择了 redis。我需要某种函数,它采用任何结构并将其按原样保存到 redis 作为值。有没有什么办法可以做到这一点,而不用使用作为interface{}接收参数或重复自己太多,但仍然保持类型安全?
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

使用gob、json或类似的编码包将结构值编码为 []byte 。将 []byte 存储在 Redis 中。获取数据时逆向过程。

假设 Redis 客户端具有Set和Get方法,使用 JSON 包的代码将如下所示:

func set(c *RedisClient, key string, value interface{}) error {

    p, err := json.Marshal(value)

    if err != nil {

       return err

    }

    return c.Set(key, p)

}


func get(c *RedisClient, key string, dest interface{}) error {

    p, err := c.Get(key)

    if err != nil {

       return err

    }

    return json.Unmarshal(p, dest)

}

像这样使用它来保存一个值:


var v someType

if err := set(c, key, v); err != nil {

     // handle error

}

并像这样检索一个值。请注意,指向该值的指针会传递给get.


var v someType

if err := get(c, key, &v); err != nil {

     // handle error

}

需要根据您使用的 Redis 客户端调整详细信息。


只要应用程序使用相同的类型设置和获取给定键的值,这种方法就可以避免重复并且是类型安全的。


查看完整回答
反对 回复 2023-05-15
  • 1 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信