【问题标题】:Finding keys using wildcards使用通配符查找键
【发布时间】:2020-09-09 02:33:25
【问题描述】:

我已经用分号保存了数据。

redis> keys party:*

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

是否有任何命令可以列出所有各方?如果是上面的例子,我希望

congress
bjp
sena

【问题讨论】:

  • 您必须为此维护单独的列表,它并不昂贵

标签: redis


【解决方案1】:

不,没有命令可以做到这一点。 但是如果你真的需要的话,在客户端实现它是微不足道的。

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

使用 Redis,没有用于索引键的 btree 结构,因此您无法查询键,除非您的键存储在现有集合中(set、zset 等...)

【讨论】:

  • 我在this answer 中看到可以通过部分键进行搜索。由于我刚刚学习redis,我不确定它有多准确。我认为您可能需要更新您的答案以包含更多详细信息。
  • 可以按部分键搜索,但不能通过部分键有效搜索,除非您为此显式创建数据结构。此外,这里的原始问题不是关于搜索,而是关于结果的操作(最好在客户端完成)。
  • 好点,我在键中寻找部分搜索,这是谷歌的第二个结果。
【解决方案2】:

你可以在redis中使用SCAN命令搜索key而不阻塞整个数据库。

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 起可用

【讨论】:

    【解决方案3】:

    您可以使用KEYS* 通配符。

    示例

    SET user:1 Amir
    SET user:2 Jack
    

    使用通配符获取所有用户:

    KEYS user:*
    

    结果将是:

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

    【讨论】:

    • 不要在常规应用程序代码中使用 KEYS。如果您正在寻找一种在键空间子集中查找键的方法,请考虑使用 SCAN 或集合。
    【解决方案4】:

    我认为如果你想从 redis 中获取“派对”数据,那么每次保存常规数据时,你也会将派对名称保存到派对列表中,那么你可以轻松获取它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      • 2016-04-09
      • 1970-01-01
      相关资源
      最近更新 更多