【问题标题】:How to model this hash with values as list in redis?如何将此哈希值建模为redis中的列表?
【发布时间】:2015-06-01 17:45:57
【问题描述】:

我要在redis中存储数据,要存储的数据是form的

{
  "KEY" : {
        "k1":["v1", "v2", "v3"],
        "k2":["v4", "v5"],
        "k3":["v1", "v2]}
    },
  "KEY1" :{
        "k1":["v11", "v2"],
        "k2":["v4", "v15", "v3"],
        "k3":["v12", "v2]}
    }
}

根据文档,我们不能将列表作为哈希数据结构中的值。对此建模的最佳方法是什么,列表一次生成一个值,所以我需要追加或添加。每个顶级键是否应该有不同的数据库?或者是否应该有不同的redis实例需要被调出,以便顶级键用于识别中级键可以在其中的特定数据库或实例用作加载列表或集合中的值的键?

【问题讨论】:

    标签: optimization data-structures redis


    【解决方案1】:

    Redis 在如何构建数据方面非常灵活,但这里有一种可能的方法。

    由于哈希值必须是字符串,它们可以是引用列表的键。因此,您可以在顶级键下创建值列表:

    redis> lpush list_value:k1 v1
    (integer) 1
    redis> lpush list_value:k1 v2
    (integer) 2
    redis> lpush list_value:k1 v3
    (integer) 3
    

    然后将引用该列表的键设置为哈希值:

    redis> hset KEY k1 list_value:k1
    (integer) 1
    

    要获取值列表,首先要获取存储这些值的键:

    redis> hget KEY k1
    "list_value:k1"
    

    然后您使用该键来检索值列表:

    redis> lrange list_value:k1 0 -1
    1) "v3"
    2) "v2"
    3) "v1"
    

    您应该使用命名空间(通常基于冒号分隔符)来命名指向您的值列表的键,以避免与散列的键发生冲突。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-06
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 2012-02-08
      • 1970-01-01
      • 2015-05-26
      相关资源
      最近更新 更多