使用通配符查找密钥

时间:2012-01-05 14:34:25

标签: redis

我使用分号保存了数据。

redis> keys party:*

1) "party:congress:president"
2) "party:bjp:president"
3) "party:bjp"
4) "party:sena"

是否有任何命令列出所有各方?在上面的例子中,我希望

congress
bjp
sena

4 个答案:

答案 0 :(得分:24)

不,没有命令这样做。 但如果你真的需要在客户端实现它将是微不足道的。

应用程序绝不应使用KEYS命令来检索数据。 KEYS会阻塞整个Redis实例,同时线性扫描您存储的数百万个密钥。它更像是一个应该在管理工具中使用的调试命令。

使用Redis,没有btree结构来索引键,所以你不能查询键,除非你的键存储在现有的集合中(set,zset等...)

答案 1 :(得分:5)

您可以使用redis中的SCAN命令搜索键而不会阻止整个数据库。

redis SCAN docs

此命令有一个可选的MATCH过滤器,其工作方式与KEYS命令上的过滤器非常相似。

redis> SCAN 0 MATCH party:*

1) <the cursor>
2) 1) "party:congress:president"
   2) "party:bjp:president"
   3) "party:bjp"
   4) "party:sena"

继续调用,直到光标返回0以获取所有各方 (如果在扫描时插入它们,可能无法获得所有参与方)

自2.8以来可用

答案 2 :(得分:3)

您可以使用KEYS*通配符。

示例

SET user:1 Amir
SET user:2 Jack

要使所有用户都使用通配符:

KEYS user:*

结果将是:

1) "user:1"
2) "user:2"

答案 3 :(得分:1)

我想如果您想从redis获取'派对'数据,那么每次保存常规数据时,您还会将派对名称保存到派对列表中,然后就可以轻松获取