sql >> Base de Datos >  >> NoSQL >> Redis

Redis - Tablas Lua como valores de retorno - ¿Por qué esto no funciona?

Si consulta Redis EVAL documentación puede ver cuáles son las reglas que utiliza Redis para convertir una tabla de Lua en una respuesta de Redis:

  1. Tabla de Lua (matriz) -> Redis multirespuesta masiva (truncada al primer cero dentro de la matriz de Lua, si corresponde )
  2. Tabla Lua con un solo campo ok -> Respuesta de estado de Redis
  3. Tabla de Lua con un único campo de error -> Respuesta de error de Redis

Entonces, excepto en los casos especiales 2 y 3, Redis asume que su tabla es una secuencia (es decir, una lista), lo que significa que lee retv[1], retv[2], ... hasta que encuentra un nil (aquí está la sección del código fuente correspondiente).

Esto explica por qué retv["test"] se ignora en su caso.

Si cambia su código con:

local retv = {"This", "is", "a", "bug" }
retv[5] = 1000
return retv

Luego se devuelve este elemento adicional:

1) "This"
2) "is"
3) "a"
4) "bug"
5) (integer) 1000