使用节点中的lua脚本扫描密钥

问题描述 投票:0回答:2

我一直在尝试使用scan从Redis获取所有密钥,同时也避免使用count。问题是,当有很多键(例如1000000)时,SCAN 0 MATCH *的扫描速度比以下要慢得多:

KEYS *

SCAN 0 MATCH * COUNT 1000000

[我读过article说要使用Lua以获得更好的性能。在这件事上有人可以帮我吗?我想使用Lua来处理所有键数大于1M的键的扫描。我在npm之前使用redis软件包。

javascript node.js performance redis lua
2个回答
0
投票

SCAN一起使用COUNT 1000000会比使用KEYS稍微差一点。

Redis是单线程的。引入SCAN的原因之一是允许通过一次执行几个步骤来遍历所有密钥而不会长时间阻塞服务器。

默认值为10。这意味着该命令将带回或多或少的10个键,如果这些键稀疏地填充在哈希槽中,或者被MATCH模式过滤掉,则该命令可能会减少。如果某些密钥共享一个哈希槽,则可能会更多。无论如何,执行的工作与COUNT参数成比例。

这并不意味着KEYS命令(或SCAN编号较大的COUNT禁止)。如果您认为服务器在运行所需的时间内被阻止还可以,请继续。

有关更多详细信息和Lua示例,请参见Is there any recommended value of COUNT for SCAN / HSCAN command in REDIS?。>>

It is possible to merge two separate DBs (e.g. db0, db1) running in one single Redis instance (6379) into one single DB (db0)?How can I get all of the sets in redis?中,我发布了有关如何在Lua脚本中使用SCAN达到自定义要求的示例。

您可能会发现Redic `SCAN`: how to maintain a balance between newcomming keys that might match and ensure eventual result in a reasonable time?很有趣。

如何在Redis中使用node.js使用Lua:executing redis eval command to run Lua script in nodeJS


-1
投票

找到了相关的解决方案。请检查此link。KEY,SCAN,Lua脚本的性能:

© www.soinside.com 2019 - 2024. All rights reserved.