带前缀匹配模式的redis扫描是否扫描数据库中的所有密钥?
问题描述:
比方说,我有一个百万个按键的redis实例。密钥包含团队ID和人员ID,值包含有关该团队人员关联的一些信息。例如键:带前缀匹配模式的redis扫描是否扫描数据库中的所有密钥?
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 ...