-
EVAL
requiere un mínimo de dos argumentos; la secuencia de comandos y el número de claves que está pasando a la secuencia de comandos. En este caso, está pasando cero claves, lo que significa que la secuencia de comandos se puede invocar de la siguiente manera:redis-cli EVAL "$(cat sum.lua)" 0
o:
redis-cli --eval sum.lua
-
Su estructura de bucle para iterar sobre los valores devueltos por
KEYS
era incorrecto; Lo he arreglado para ti. -
Debe convertir el valor devuelto por
GET
de una cadena a un número usandotonumber
de Lua función.
Con los cambios anteriores realizados, el siguiente script debería funcionar para usted:
local sum = 0
local matches = redis.call('KEYS', 'carlos:*')
for _,key in ipairs(matches) do
local val = redis.call('GET', key)
sum = sum + tonumber(val)
end
return sum