Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Redis - Lua-Tabellen als Rückgabewerte - warum funktioniert das nicht

Wenn Sie sich auf die Redis EVAL beziehen Dokumentation können Sie sehen, welche Regeln Redis verwendet, um eine Lua-Tabelle in eine Redis-Antwort zu konvertieren:

  1. Lua-Tabelle (Array) -> Redis Multi-Bulk-Antwort (auf die erste Null innerhalb des Lua-Arrays gekürzt, falls vorhanden )
  2. Lua-Tabelle mit einem einzigen OK-Feld -> Redis-Statusantwort
  3. Lua-Tabelle mit einem einzelnen Fehlerfeld -> Redis-Fehlerantwort

Abgesehen von den Sonderfällen 2 und 3 geht Redis also davon aus, dass Ihre Tabelle eine Sequenz (d. h. eine Liste) ist, was bedeutet, dass sie retv[1], retv[2], ... lautet bis es auf nil trifft -Element (hier ist der entsprechende Quellcodeabschnitt).

Dies erklärt, warum retv["test"] wird in Ihrem Fall ignoriert.

Wenn Sie Ihren Code ändern mit:

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

Dann wird dieses zusätzliche Element zurückgegeben:

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