猿问

将通用结构保存到 redis

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



慕盖茨4494581
浏览 79回答 1
1回答

largeQ

使用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 someTypeif err := set(c, key, v); err != nil {     // handle error}并像这样检索一个值。请注意,指向该值的指针会传递给get.var v someTypeif err := get(c, key, &v); err != nil {     // handle error}需要根据您使用的 Redis 客户端调整详细信息。只要应用程序使用相同的类型设置和获取给定键的值,这种方法就可以避免重复并且是类型安全的。
随时随地看视频慕课网APP

相关分类

Go
我要回答