如何将扫描限制为特定的一组密钥



在redis(2.8.x)中,我有三种实体类型(我定义实体)
为了简单起见,我们将其称为组织部门用户
当我运行scan时,它对内存中的所有键进行迭代,但只带来与match子句匹配的内容
有没有办法将scan限制为密钥的一个子集?例如搜索只有用户组密钥
每个组都有不同(但一致)的密钥名称模式(org:[id] dep:[id] user:[id]

SCAN有一个可选的MATCH参数,它接受glob模式。

你可以这样做来扫描你的用户对象:

SCAN 0 MATCH user:*

由于评论太长而进行编辑

显然,扫描不是一个神奇的方法,一个完整的循环(直到您收到"0"光标)必须通过您的所有键空间。MATCH选项在Redis端进行过滤,而不是在客户端进行过滤。

正如Itamar在评论中所建议的那样,为了能够在不遍历完整密钥空间的情况下获得所需的密钥,您必须对它们进行集合索引(您还必须在删除时维护它)。

例如,如果您的用户密钥是:

user:31 user31data
user:45 user45data
user:67 user67data
user:13 user13data

您应该有一个用户ID的SET

users:IDs {31, 45, 67, 13}

要检索所有用户数据,您可能需要ID和数据:

sort users:IDs by nosort get # get user:*

最新更新