栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ServiceStack Redis,如何将Lua表作为列表返回

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ServiceStack Redis,如何将Lua表作为列表返回

从Lua,您需要返回Lua数组或JSON对象。“
myTable”听起来像一个仅在Lua解释器内部有效的句柄。该句柄将在调用后立即清理,因此不会传播到客户端。

编辑:应该 支持一个简单的Lua表/数组。不知道接下来发生了什么,而无需查看脚本。

另请参见此SO 链接,以获取有关Lua脚本原子性的一些额外信息。

希望这会有所帮助,TW

编辑OP之后:

这是OP的原始Lua脚本:

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')endreturn a

答: 您不能在Lua返回值中返回嵌套值。从ServiceStack函数可以看到,Lua脚本返回一个列表,并且列表没有嵌套。

这里有两种解决方案,一种采用JSON的解决方案会产生少量开销(但编程时可能会更容易,而且非常安全)。

答:使用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')endreturn cjson.enpre(a)

MsgPack还是一种非常好的紧凑型序列化格式(我们经常使用),可以这样返回:

a-alt:使用cmsgpack

return cmsgpack.pack(a)

b:使用一个简单的数组

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')endreturn a

返回:

tw@srv-flux-02:~$ redis-cli -p 14312 eval "$(cat ~/tw_luatest.lua)" 0 0"{"47700415":"Hello","47700415_000":"World"}"

b

tw@srv-flux-02:~$ redis-cli -p 14312 eval "$(cat ~/tw_luatest2.lua)" 0 01) "47700415"2) "Hello"3) "47700415_000"4) "World"

如您所见,我在中放入了一些虚拟数据

HSET

我也可以推荐此链接,那里有一些不错的信息:lua-for-redis-
programmers简介

可以在这里看到一个为Lua dict添加值的好方法:

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/377044.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号