私は、Luaを使ってSCANを反復する推奨された方法を探していましたが、そのために "ベストプラクティス"があるかどうか疑問に思っていました。以下のスクリプトは、私が今までに見つけた最高のものでした。誰も追加するものはありますか? COUNT 1000000000を使用して反復するのが賢明ですか?それはブロックされませんか?撮影Lua for RedisでSCANを繰り返すにはどのような方法が推奨されますか?
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
このように、スクリプトはアトミックでブロックされているため、唯一の懸案事項は、COUNTが大量のRAMを使用する可能性があることです。 Itamarに感謝します。 – geoyws