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

最佳答案

SCAN具有一个可选的MATCH参数,该参数接受全局模式。

您可以执行以下操作来扫描用户对象:

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

关于redis - 如何将扫描限制为特定的键组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28570082/

10-13 02:25