lua - 在 Lua for Redis 中迭代 SCAN 的推荐方法是什么?

标签 lua redis

我一直在寻找使用 Lua 迭代 SCAN 的推荐方法,并且想知道是否有“最佳实践”可以这么说。下面的脚本是迄今为止我能找到的最好的。有人有什么要补充的吗?使用 COUNT 1000000000 进行迭代是否明智?那不会阻塞吗?

local ans, has, cursor = {}, {}, "0";
repeat
    local t = redis.call("SCAN", cursor, "MATCH", KEYS[1], "COUNT", 1000000000);
    local list = t[2];
    for i = 1, #list do
        local s = list[i];
        if has[s] == nil then has[s] = 1; ans[#ans + 1] = s; end;
    end;
    cursor = t[1];
until cursor == "0";
return #ans; --or return ans;

取自:https://github.com/antirez/redis/issues/3190#issuecomment-214022437

最佳答案

脚本将在运行时阻塞,直到结束 - 在您的示例中,一旦 SCANning 完成,就会发生这种情况。 COUNTSCAN 命令的提示越大,每次调用它返回的结果就越多,导致存储回复所需的 RAM 越多(变量 t )。这可能会导致内存不足的情况,因此您应该避免使用如此大的 COUNT 值。我建议坚持使用默认值 (100),并省略 COUNT 提示。

关于lua - 在 Lua for Redis 中迭代 SCAN 的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44842430/

相关文章:

multithreading - Lua中的抢占式多线程

Lua真正的二进制I/O

node.js - 如何在 restify 上扩展 socket.io?

c++ - 尝试将 Lua 嵌入到 C++ 中, "undefined reference to ' dlopen'”

lua - awesome wm 登录时崩溃

node.js - Nodejs redis 方法 BLPOP 阻塞事件循环

redis - 返回节点名称而不是类型/标签?

python - 取消 Python RQ 中已经执行的任务?

laravel - 阻止用户查看其他用户正在查看的内容的最佳方法?

c - Lua - 检测整数