Este es el código de script de Lua en el archivo test.lua:
local ips_key = 'production:ips' local ids = redis.call('ZRANGE', ips_key, 0, '+inf', 'WITHSCORES') local result = {} for i, name in ipairs(ids) do table.insert(result, name) end return js.global:Array(table.unpack(result))Estoy usando ioredis, que es un redis npm para evaluar este script lua. el valor devuelto no está definido. ¿Qué estoy haciendo mal? ¡Gracias!
Hay varios problemas con el script anterior.
L#2: ZRANGE no acepta +inf (o -inf ) como argumentos, la entrada debe ser índices en el conjunto ordenado; reemplácelo con -1 para recuperar el rango completo de elementos.
L#7: No hay una biblioteca js en Lua de Redis, por lo que no funcionará (y no es necesaria de todos modos)
L#7: table.unpack es Lua 5.3, mientras que Redis es 5.1; use unpack en su lugar cuando sea necesario.
L#7: No es necesario unpack el resultado que está devolviendo (si lo hace, solo recuperará el primer elemento de la matriz y eso es todo)
L#1 Entiendo que esto es una prueba, pero siempre use la tabla de entrada KEYS para pasar sus claves al script; nunca codifique/genere nombres clave dentro de él.
Con todo, esto debería "funcionar" cuando se llama con una sola tecla como entrada:
local ips_key = KEYS[1] local ids = redis.call('ZRANGE', ips_key, 0, -1, 'WITHSCORES') local result = {} for i, name in ipairs(ids) do table.insert(result, name) end return result Como nota final, el código actualmente "funciona" pero no hace nada: copia los resultados de la llamada a ZRANGE y los devuelve. Dicho de otra manera, la respuesta es la misma que simplemente llamar a ZRANGE regularmente sin Lua.