Optimization 如何使用redis中的列表值对该散列进行建模?

Optimization 如何使用redis中的列表值对该散列进行建模?,optimization,data-structures,redis,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中,其中要存储的数据是格式的

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

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

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"
您应该使用名称空间(通常基于冒号分隔符)来命名指向值列表的键,以避免与哈希表的键发生冲突