我一直在尝试使用scan从Redis获取所有密钥,同时也避免使用count。问题是,当有很多键(例如1000000)时,SCAN 0 MATCH *
的扫描速度比以下要慢得多:
KEYS *
或
SCAN 0 MATCH * COUNT 1000000
[我读过article说要使用Lua以获得更好的性能。在这件事上有人可以帮我吗?我想使用Lua来处理所有键数大于1M的键的扫描。我在npm之前使用redis软件包。
与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
达到自定义要求的示例。
如何在Redis中使用node.js使用Lua:executing redis eval command to run Lua script in nodeJS
找到了相关的解决方案。请检查此link。KEY,SCAN,Lua脚本的性能: