Redis
 sql >> Database >  >> NoSQL >> Redis

Redis - Tabelle Lua come valori di ritorno:perché non funziona

Se fai riferimento a Redis EVAL documentazione puoi vedere quali sono le regole che Redis usa per convertire una tabella Lua in una risposta Redis:

  1. Tabella Lua (array) -> Risposta Redis multi bulk (troncata al primo zero all'interno dell'array Lua, se presente )
  2. Tabella Lua con un solo campo ok -> Risposta stato Redis
  3. Tabella Lua con un singolo campo err -> Risposta errore Redis

Quindi, eccetto per i casi speciali 2 e 3, Redis presume che la tua tabella sia una sequenza (cioè un elenco), il che significa che legge retv[1], retv[2], ... finché non incontra un nil element (qui è la sezione del codice sorgente corrispondente).

Questo spiega perché retv["test"] viene ignorato nel tuo caso.

Se modifichi il tuo codice con:

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

Quindi questo elemento aggiuntivo viene restituito:

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