无论如何要检索以redis中的特定字符串开头的所有键?

时间:2011-09-18 17:57:39

标签: javascript redis

无论如何都要检索以redis中的特定字符串开头的所有键吗?

我想做一些事情,比如存储:

'thing1:userid1' : ' ';
'thing1:userid2' : ' ';
'thing2:userid1' : ' ';
'thing2:userid2' : ' ';

并检索每个thing1,而无需了解每个用户。

5 个答案:

答案 0 :(得分:11)

REDIS.keys("thing1:*")

但是,您可能需要考虑使用地图。

REDIS.hset("thing1", "user1", "")
REDIS.hset("thing1", "user2", "")
REDIDS.hgetall("thing1")

在生产中要小心这一点。 Redis一次只能处理一个命令,而KEYS非常慢。它必须查看整个数据库中的每个键。

答案 1 :(得分:1)

您还可以跟踪列表中的ID,然后使用SORT http://redis.io/commands/SORT检索所有键(或哈希)的值。

它比#34; KEYS"更复杂。但它也可以做得更多(:

我读到某个地方,如果哈希中有太多字段,hgetall会给你带来问题,遗憾的是我无法找到引用atm。

答案 2 :(得分:0)

答案 3 :(得分:0)

redis中有一个KEYS命令,用于搜索指定模式的所有键名。但是,在使用此命令时应该小心,因为它具有O(N)时间复杂度,因此性能取决于数据库中的键数量。它主要用于调试,不适合生产环境。

答案 4 :(得分:0)

您可以使用SCAN命令迭代与给定模式匹配的所有键:

> SCAN 0 MATCH thing1:*
1) "172032"
2) 1) "thing1:userid1"
   2) "thing1:userid2"
> SCAN 172032 MATCH thing1:*
1) "0"
2) 1) "thing1:userid3"