首页 文章

将通用结构保存到redis

提问于
浏览
0

在编写golang webserver时,我不得不使用某种缓存,所以我选择了redis . 我需要一些带有任何结构的函数,并将其保存为redis作为值 . 有没有办法做到这一点,不使用 interface{} 作为接收参数或重复自己太多,仍然保持类型安全?

1 回答

  • 3

    使用gobjson或类似的编码包将struct值编码为[]字节 . 将[]字节存储在Redis中 . 获取数据时反转过程 .

    假设Redis客户端具有SetGet的方法,使用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客户端调整详细信息 .

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

相关问题