代码之家  ›  专栏  ›  技术社区  ›  Max

将通用结构保存到redis

  •  0
  • Max  · 技术社区  · 7 年前

    在编写golang Web服务器时,我不得不使用某种缓存,所以我选择了redis。 有没有办法不使用 interface{}

    1 回复  |  直到 7 年前
        1
  •  18
  •   Cerise Limón    7 年前

    使用 gob json 或类似的编码包。将[]字节存储在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
    }
    

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