无论如何都要检索以redis中的特定字符串开头的所有键吗?
我想做一些事情,比如存储:
'thing1:userid1' : ' ';
'thing1:userid2' : ' ';
'thing2:userid1' : ' ';
'thing2:userid2' : ' ';
并检索每个thing1
,而无需了解每个用户。
答案 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"