使用前缀匹配模式的 redis 扫描是否扫描数据库中的所有键?
Does a redis scan with a prefix match pattern scan all keys in database?
假设我有一个带有一百万个键的 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 实例。键包含团队 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 ...