使用通配符查找密钥

sha*_*nuo 16 redis

我用分号保存了数据.

redis> keys party:*

1) "party:congress:president"
2) "party:bjp:president"
3) "party:bjp"
4) "party:sena"
Run Code Online (Sandbox Code Playgroud)

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

congress
bjp
sena
Run Code Online (Sandbox Code Playgroud)

Did*_*zia 24

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

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

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

  • 可以通过部分键进行搜索,但不可能通过部分键进行有效搜索,除非您为此显式创建数据结构。此外,这里最初的问题不是关于搜索,而是关于结果的操作(最好在客户端完成)。 (2认同)

小智 7

您可以使用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"
Run Code Online (Sandbox Code Playgroud)

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

自2.8以来可用


Ami*_*ati 6

您可以使用KEYS*通配符。

SET user:1 Amir
SET user:2 Jack
Run Code Online (Sandbox Code Playgroud)

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

KEYS user:*
Run Code Online (Sandbox Code Playgroud)

结果将是:

1) "user:1"
2) "user:2"
Run Code Online (Sandbox Code Playgroud)

  • 不要在常规应用程序代码中使用 KEYS。如果您正在寻找一种在键空间子集中查找键的方法,请考虑使用 SCAN 或集合。 (2认同)