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

ServiceStack Redis, hvordan man returnerer Lua-tabellen som liste

Fra Lua skal du returnere et Lua Array eller et JSON-objekt. 'myTable' lyder som et håndtag, der kun er gyldigt inde i Lua-tolken. Det håndtag ryddes op direkte efter opkaldet, så det spredes ikke til klienten.

Rediger:en simpel Lua Table/Array bør understøttes. Ikke sikker på, hvad der sker, uden at se på manuskriptet.

Se også dette SO-link for lidt ekstra info om atomiciteten af ​​Lua-scripts.

Håber dette hjælper, TW

Efter redigering OP:

Dette var OP's originale Lua-script:

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

Svar: Du kan ikke returnere indlejrede værdier i Lua-returværdien. Som du kan se fra din ServiceStack-funktion, returnerer et Lua-script en liste, og en liste er ikke indlejret.

Her er to løsninger, den med JSON giver lidt overhead (men kan være nemmere ved programmering og er nul-sikker).

a:Brug af 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 er også et meget flot og kompakt serialiseringsformat (vi bruger det meget), og kan returneres sådan her:

a-alt:Brug af cmsgpack

return cmsgpack.pack(a)

b:Brug af en simpel matrix

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

Dette returnerer:

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"

Som du kan se, har jeg lagt nogle dummy-data i HSET .

Jeg kan også anbefale dette link, nogle gode oplysninger derinde:intro-to-lua-for-redis-programmers

En god måde at tilføje værdier til en Lua dict kan ses her :

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. Hvordan udfører man en masseopdatering af dokumenter i MongoDB med Java?

  2. Rate-Limit an API (spring MVC)

  3. Opbygning af mongo-cxx-driver ved hjælp af CMake ExternalProject_Add

  4. Hvordan udfører man mongo-kommandoer gennem shell-scripts?