带前缀匹配模式的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 ... 

但我想确认 - 是这样吗?

确认,事实确实如此。

店下组ID

这正是你应该设定人的ID。但是,请注意,一旦这个Set变得太大,做SMEMBERS可能是一个昂贵的操作(因此即将到来的整体性能)。如果确实成为问题,请使用SSCAN来悠闲地找回它。