使用前缀匹配模式的redis扫描是否扫描数据库中的所有密钥?
假设我有一个拥有一百万个密钥的redis实例。这些键包含一个团队ID和一个人员ID,这些值包含有关该团队人员关联的一些信息。示例键:使用前缀匹配模式的redis扫描是否扫描数据库中的所有密钥?,redis,redis-3.2,Redis,Redis 3.2,假设我有一个拥有一百万个密钥的redis实例。这些键包含一个团队ID和一个人员ID,这些值包含有关该团队人员关联的一些信息。示例键: team:1:person:123 team:2:person:234 team:2:person:345 ... 我可以使用带有模式的扫描来获取给定团队中的所有人员。例如,scan 0 match“team:123:person:*”,将开始获取team 123中的所有人 听起来这不是迭代团队中人员的有效方法,因为scan是O(N),其中N是数据库中的键数。但
team:1:person:123
team:2:person:234
team:2:person:345
...
我可以使用带有模式的扫描来获取给定团队中的所有人员。例如,scan 0 match“team:123:person:*”
,将开始获取team 123中的所有人
听起来这不是迭代团队中人员的有效方法,因为scan是O(N),其中N是数据库中的键数。但我想确认一下——是这样吗
具有树索引的数据库可能只需要扫描树的一小部分,其中的键具有该前缀
如果它确实扫描了所有内容,那么我想如果我想快速迭代团队中的人员,我需要将人员ID集存储在团队ID下。类似于:
sset team:2:people 234 345 ...
但我想确认一下——是这样吗
事实确实如此
将人员ID集存储在团队ID下
这正是你应该做的。然而,请注意,一旦该集合变得太大,则可能是一项昂贵的操作(因此,整体性能即将受到影响)。如果这确实成为了一个问题,那么使用它来轻松地检索它
但我想确认一下——是这样吗
事实确实如此
将人员ID集存储在团队ID下
这正是你应该做的。然而,请注意,一旦该集合变得太大,则可能是一项昂贵的操作(因此,整体性能即将受到影响)。如果这确实成为了一个问题,那么使用它来轻松地检索它