Сценарий удаления с подстановочными знаками Redis с использованием EVAL, SCAN и DEL возвращает «Команды записи не разрешены после недетерминированных команд»
Поэтому я нахожусь в поиске сценария lua, который использует SCAN, чтобы найти ключи на основе шаблона и удалить их (атомарно). Я сначала подготовил следующий скрипт
local keys = {};
local done = false;
local cursor = "0"
repeat
local result = redis.call("SCAN", cursor, "match", ARGV[1], "count", ARGV[2])
cursor = result[1];
keys = result[2];
for i, key in ipairs(keys) do
redis.call("DEL", key);
end
if cursor == "0" then
done = true;
end
until done
return true;
Что бы выглядело так: «Err: @user_script: 9: Команды записи не разрешены после недетерминированных команд». Поэтому я немного подумал и придумал следующий скрипт:
local all_keys = {};
local keys = {};
local done = false;
local cursor = "0"
repeat
local result = redis.call("SCAN", cursor, "match", ARGV[1], "count", ARGV[2])
cursor = result[1];
keys = result[2];
for i, key in ipairs(keys) do
all_keys[#all_keys+1] = key;
end
if cursor == "0" then
done = true;
end
until done
for i, key in ipairs(all_keys) do
redis.call("DEL", key);
end
return true;
которая по-прежнему возвращает ту же ошибку (@user_script: 17: команды записи запрещены после недетерминированных команд). Это поставило меня в тупик. Есть ли способ обойти эту проблему?
скрипт был запущен с использованием phpredis и следующих
$args_arr = [
0 => 'test*', //pattern
1 => 100, //count for SCAN
];
var_dump($redis->eval($script, $args_arr, 0));