Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Redis - tabelas Lua como valores de retorno - por que isso não está funcionando


Se você se referir ao Redis EVAL documentação você pode ver quais são as regras que o Redis usa para converter uma tabela Lua em uma resposta do Redis:
  1. Lua table (array) -> Redis multi bulk response (truncado para o firstnil dentro do array Lua, se houver )
  2. Tabela Lua com um único campo ok -> Resposta de status do Redis
  3. Tabela Lua com um único campo de erro -> Resposta de erro do Redis

Portanto, exceto nos casos especiais 2 e 3, o Redis assume que sua tabela é uma sequência (ou seja, uma lista), o que significa que ela lê retv[1], retv[2], ... até encontrar um nil elemento (aqui está a seção de código-fonte correspondente).

Isso explica por que retv["test"] é ignorado no seu caso.

Se você alterar seu código com:
local retv = {"This", "is", "a", "bug" }
retv[5] = 1000
return retv

Em seguida, este elemento adicional é retornado:
1) "This"
2) "is"
3) "a"
4) "bug"
5) (integer) 1000