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

3

在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()

需要迭代并获取每个单独的项目吗?能否进行更多优化?


1
您也可以将所有对象以序列化形式存储在列表中(例如JSON)。然后,只需进行简单的LRANGE操作即可。 - Sergio Tulentsev
谢谢Sergio,我没有考虑过这个问题,但我更喜欢在Redis中有操作对象属性的可能性。 - ksiomelo
1个回答

4
你可以使用 SORT 命令来实现此功能:
SORT concepts BY nosort GET concept:*->name GET concept:*->some_key

* 是通配符,代表列表中的每一项。

为了分页,可以使用 LIMIT offset count

需要注意的是要枚举哈希表中的每个字段(你想要获取的每个字段)。

另一个选项是使用新版 Redis 2.6 中的 EVAL 命令,在 Redis 服务器上执行 Lua 脚本来完成你想要的操作。


如果对象的属性之一是一个列表怎么办?例如LPUSH concept:1:things rabbit。如何获取这个列表呢? - ksiomelo
1
你不能这样做。只能获取或者HGET其他的东西。请查看文档(上面链接了Redis命令通常有非常好的文档)。 - Linus Thiel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接