El script de eliminación de comodines de Redis con EVAL, SCAN y DEL devuelve "Escribir comandos no permitidos después de comandos no deterministas"

Así que estoy en una búsqueda para construir un script lua que use SCAN para encontrar claves basadas en un patrón y eliminarlas (atómicamente). Primero preparé el siguiente guión

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;

Lo cual escupiría el siguiente "Err: @user_script: 9: Escribir comandos no permitidos después de comandos no deterministas" Así que lo pensé un poco y se me ocurrió el siguiente script:

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;

que todavía devuelve el mismo error (@user_script: 17: Escribir comandos no permitidos después de comandos no deterministas). Esto me tiene perplejo. ¿Hay alguna forma de eludir este problema?

el script se ejecutó usando phpredis y lo siguiente

$args_arr = [
          0 => 'test*',   //pattern
          1 => 100,     //count for SCAN
  ];
  var_dump($redis->eval($script, $args_arr, 0));

Respuestas a la pregunta(1)

Su respuesta a la pregunta