Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用前缀匹配模式的redis扫描是否扫描数据库中的所有密钥?_Redis_Redis 3.2 - Fatal编程技术网

使用前缀匹配模式的redis扫描是否扫描数据库中的所有密钥?

使用前缀匹配模式的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是数据库中的键数。但

假设我有一个拥有一百万个密钥的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是数据库中的键数。但我想确认一下——是这样吗

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

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

sset team:2:people 234 345 ...
但我想确认一下——是这样吗

事实确实如此

将人员ID集存储在团队ID下

这正是你应该做的。然而,请注意,一旦该集合变得太大,则可能是一项昂贵的操作(因此,整体性能即将受到影响)。如果这确实成为了一个问题,那么使用它来轻松地检索它

但我想确认一下——是这样吗

事实确实如此

将人员ID集存储在团队ID下

这正是你应该做的。然而,请注意,一旦该集合变得太大,则可能是一项昂贵的操作(因此,整体性能即将受到影响)。如果这确实成为了一个问题,那么使用它来轻松地检索它