sql >> Databáze >  >> NoSQL >> Redis

Redis - Lua tabulky jako návratové hodnoty - proč to nefunguje

Pokud se odkážete na EVAL Redis dokumentaci můžete vidět, jaká jsou pravidla, která Redis používá k převodu tabulky Lua na odpověď Redis:

  1. Tabulka Lua (pole) -> Hromadná odpověď Redis (zkrácena na první nulu v poli Lua, pokud existuje )
  2. Tabulka Lua s jedním polem OK -> Odpověď stavu Redis
  3. Tabulka Lua s jedním polem Err -> Odpověď na chybu Redis

Takže kromě speciálních případů 2 a 3 Redis předpokládá, že vaše tabulka je sekvence (tj. seznam), což znamená, že čte retv[1], retv[2], ... dokud nenarazí na nil element (zde je odpovídající část zdrojového kódu).

To vysvětluje, proč retv["test"] je ve vašem případě ignorováno.

Pokud změníte kód pomocí:

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

Poté se tento další prvek vrátí:

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


  1. MongoDB:Najděte vnořený dokument v Array Matching Parameters

  2. Co je InputSplit v Hadoop MapReduce?

  3. Nelze najít modul '../build/Release/bson'] kód:'MODULE_NOT_FOUND' } js-bson:Nepodařilo se načíst rozšíření c++ bson pomocí čisté verze JS

  4. Vytváří knihovna Redis vlastní vlákno pro asynchronní zpětná volání