如何在Redis中从列表中检索所有哈希值?

如何在Redis中从列表中检索所有哈希值?,redis,Redis,在Redis中,要存储对象数组,我们应该对对象使用哈希并将其键添加到列表中: HMSET concept:unique_id name "concept" ... LPUSH concepts concept:unique_id ... 我想检索列表中的所有散列值(或对象),但列表只包含散列键,因此需要一个两步命令,对吗?这就是我在python中的工作方式: def get_concepts(): list = r.lrange("concepts", 0, -1) pipe

在Redis中,要存储对象数组,我们应该对对象使用哈希并将其键添加到列表中:

HMSET concept:unique_id name "concept"
...
LPUSH concepts concept:unique_id
...
我想检索列表中的所有散列值(或对象),但列表只包含散列键,因此需要一个两步命令,对吗?这就是我在python中的工作方式:

def get_concepts():

    list = r.lrange("concepts", 0, -1)
    pipe = r.pipeline()

    for key in list:
         pipe.hgetall(key)
    pipe.execute()
是否需要迭代和获取每个单独的项目?是否可以进行更优化?

您可以使用以下命令执行此操作:

SORT concepts BY nosort GET concept:*->name GET concept:*->some_key
其中,
*
将扩展到列表中的每个项目

添加分页的
限制偏移量计数

注意,您必须枚举散列中的每个字段(要获取的每个字段)


另一个选项是使用new(在redis 2.6中)命令在redis服务器中执行Lua脚本,这可以按照您的建议执行,但服务器端除外。

您还可以将所有对象存储在列表中(例如,以序列化形式.JSON)。然后一个简单的LRANGE就可以了。谢谢Sergio,我没有考虑过这一点,但我更喜欢在Redis中操纵对象的属性,如果对象的属性之一是列表呢?e、 LPUSH概念:1:事物兔子。如何取而代之的是这个列表?你不能。只有那些你本可以
得到的东西
HGET
。请参阅文档(链接在上面——redis命令通常有非常好的文档)。