一尘不染

Redis扫描计数:如何强制SCAN返回与模式匹配的所有密钥?

redis

我试图找出存储在与redis模式匹配的键列表中的值。我尝试使用,SCAN以便以后可以MGET用来获取所有值,问题是:

SCAN 0 MATCH "foo:bar:*" COUNT 1000

不返回任何值,而

SCAN 0 MATCH "foo:bar:*" COUNT 10000

返回所需的键。我如何强制SCAN浏览所有现有键?我需要为此研究lua吗?


阅读 498

收藏
2020-06-20

共1个答案

一尘不染

使用下面的代码,您将从光标0扫描1000个第一个对象

SCAN 0 MATCH "foo:bar:*" COUNT 1000

结果,您将获得一个新的光标以进行调用

SCAN YOUR_NEW_CURSOR MATCH "foo:bar:*" COUNT 1000

扫描1000个下一个对象。然后,当您COUNT从1000增加到10000并检索数据时,您将扫描更多键,然后再匹配更多键。

要扫描整个列表,您需要重新调用,SCAN直到光标给出响应以返回零为止(即整个扫描)

使用INFO命令来获取您的密钥数量,例如

db0:keys = YOUR_AMOUNT_OF_KEYS,expires = 0,avg_ttl = 0

然后打电话

SCAN 0 MATCH "foo:bar:*" COUNT YOUR_AMOUNT_OF_KEYS
2020-06-20