Redis 扫描计数 : How to force SCAN to return all keys matching a pattern?

标签 redis

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

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

不返回任何值而

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

返回所需的键。 我如何强制 SCAN 查看所有现有 key ?我是否必须为此调查 lua?

最佳答案

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

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

结果,你会得到一个新的游标来记忆

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

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

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

使用 INFO 命令获取您的 key 数量,例如

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

然后调用

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

关于Redis 扫描计数 : How to force SCAN to return all keys matching a pattern?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33166812/

相关文章:

sql - 哪个数据库用于聊天记录?

redis配置文件不增加数据库

python - 在 Celery - Python 中的进程(工作人员)之间共享数据的最佳解决方案是什么?

redis - 当相应的状态在一段时间不活动后被认为是 'off' 时,如何取消设置 redis 位集中的位?

ruby-on-rails - Redis 如何管理未使用的缓存键?

python - Redis:查找所有早于

mysql - 使用 Redis 缓存 SQL 结果

sql-server - 调用的目标抛出了异常。 (REDIS缓存)

django - 带有 Django channel 的 Websocket 不工作,连接失败

java - Redis比较和设置原子