如何使用redis中的列表将此哈希值建模?

时间:2015-06-01 08:46:44

标签: optimization data-structures redis

我必须将数据存储在redis中,其中要存储的数据的格式为

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

根据文档,我们不能将列表作为哈希数据结构中的值。建模这个的最佳方法是,列表一次生成一个值,所以我需要追加或添加。是否应该为每个顶级密钥设置不同的数据库?或者是否应该有不同的redis实例,以便使用顶级密钥来标识中级密钥可以使用的特定数据库或实例用作加载列表或集合中的值的键?

1 个答案:

答案 0 :(得分: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"

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