Redis
 sql >> Base de données >  >> NoSQL >> Redis

Redis - Tables Lua comme valeurs de retour - pourquoi cela ne fonctionne-t-il pas

Si vous vous référez au Redis EVAL documentation, vous pouvez voir quelles sont les règles utilisées par Redis pour convertir une table Lua en une réponse Redis :

  1. Table Lua (tableau) -> Réponse groupée multiple Redis (tronquée au premier zéro dans le tableau Lua le cas échéant )
  2. Table Lua avec un seul champ ok -> Réponse d'état Redis
  3. Table Lua avec un seul champ err -> Réponse d'erreur Redis

Donc, sauf cas particuliers 2 et 3, Redis suppose que votre table est une séquence (c'est-à-dire une liste), ce qui signifie qu'elle lit retv[1], retv[2], ... jusqu'à ce qu'il rencontre un nil élément (voici la section de code source correspondante).

Cela explique pourquoi retv["test"] est ignoré dans votre cas.

Si vous modifiez votre code avec :

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

Ensuite, cet élément supplémentaire est renvoyé :

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