Сценарий удаления с подстановочными знаками 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));

Ответы на вопрос(1)

Ваш ответ на вопрос