【问题标题】:Does a redis scan with a prefix match pattern scan all keys in database?带有前缀匹配模式的 redis 扫描是否会扫描数据库中的所有键?
【发布时间】:2016-12-28 00:57:34
【问题描述】:

假设我有一个带有一百万个键的 redis 实例。键包含团队 ID 和人员 ID,值包含有关该团队-人员关联的一些信息。示例键:

team:1:person:123
team:2:person:234
team:2:person:345
...

我可以使用带有模式的scan 来获取给定团队中的所有人。例如,scan 0 match "team:123:person:*" 将开始让每个人都加入 123 队。

听起来这不是在团队中迭代人员的有效方法,因为扫描是 O(N),其中 N 是 数据库中的键数。但我想确认一下——是这样吗?

具有树索引的数据库可能只需要扫描具有该前缀的键的树的一小部分。

如果它确实扫描了所有内容,那么我想如果我想快速迭代团队中的人员,我需要将一组人员 ID 存储在一个团队 ID 下。比如:

sset team:2:people 234 345 ...

【问题讨论】:

    标签: redis redis-3.2


    【解决方案1】:

    但我想确认一下 - 是这样吗?

    确认,确实如此。

    将一组人员 ID 存储在团队 ID 下

    这正是你应该做的。但是请注意,一旦 Set 变得太大,执行SMEMBERS 可能是一项昂贵的操作(因此会影响整体性能)。如果这确实成为问题,请使用SSCAN 来轻松地检索它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多