在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:*