Redis
 sql >> Baza danych >  >> NoSQL >> Redis

ServiceStack Redis, jak zwrócić tabelę Lua jako List

Z Lua musisz zwrócić tablicę Lua lub obiekt JSON. „myTable” brzmi jak uchwyt, który działa tylko w interpreterze Lua. Ten uchwyt jest czyszczony bezpośrednio po wywołaniu, więc nie zostanie przekazany do klienta.

Edytuj:prosta tablica/tablica Lua powinna być obsługiwana. Nie wiem, co się wtedy dzieje, bez patrzenia na scenariusz.

Zobacz także ten link SO, aby uzyskać dodatkowe informacje na temat atomizacji skryptów Lua.

Mam nadzieję, że to pomoże, TW

Po edycji OP:

To był oryginalny skrypt Lua OP:

local a={}
for i = 1, 1, 1 do
  a["47700415"] = redis.call('hget', 'asr:47700415', 'MDEngines')
  a["47700415_000"] = redis.call('hget', 'asr:47700415_000', 'MGEngines')
end
return a

Odpowiedź: Nie możesz zwrócić wartości zagnieżdżonych w wartości zwracanej przez Lua. Jak widać z funkcji ServiceStack, skrypt Lua zwraca listę, a lista nie jest zagnieżdżona.

Oto dwa rozwiązania, to z JSON daje niewielkie obciążenie (ale może być łatwiejsze podczas programowania i jest zerowe).

a:Korzystanie z cjson

local a={}
for i = 1, 1, 1 do
  a["47700415"] = redis.call('hget', 'asr:47700415', 'MDEngines')
  a["47700415_000"] = redis.call('hget', 'asr:47700415_000', 'MGEngines')
end
return cjson.encode(a)

MsgPack jest również bardzo ładnym i kompaktowym formatem serializacji (często go używamy) i można go zwrócić w następujący sposób:

a-alt:Używanie cmsgpack

return cmsgpack.pack(a)

b:Korzystanie z prostej tablicy

local a={}
for i = 1, 1, 1 do
  a[1] = "47700415"
  a[2] = redis.call('hget', 'asr:47700415', 'MDEngines')
  a[3] = "47700415_000"
  a[4] = redis.call('hget', 'asr:47700415_000', 'MGEngines')
end
return a

To zwraca:

a :

[email protected]:~$ redis-cli -p 14312 EVAL "$(cat ~/tw_luatest.lua)" 0 0
"{\"47700415\":\"Hello\",\"47700415_000\":\"World\"}"

b :

[email protected]:~$ redis-cli -p 14312 EVAL "$(cat ~/tw_luatest2.lua)" 0 0
1) "47700415"
2) "Hello"
3) "47700415_000"
4) "World"

Jak widać, umieściłem kilka fikcyjnych danych w HSET .

Mogę również polecić ten link, kilka fajnych informacji tam:wprowadzenie do-lua-dla-redis-programistów

Dobry sposób dodawania wartości do dyktatu Lua można zobaczyć tutaj :

local fkeys = redis.call('sinter', unpack(KEYS))
local r = {}
for i, key in ipairs(fkeys) do
  r[#r+1] = redis.call('hgetall',key)
end
return r



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis filtruj według zakresu, sortuj i zwróć najpierw 10

  2. Używając Predis, jak ustawić (tj. przechowywać) wielowymiarową tablicę asocjacyjną?

  3. obsługa zmian przestrzeni nazw podczas deserializacji JSON String

  4. Listy Redis

  5. Redis jako Hibernacja pamięci podręcznej drugiego poziomu