redis.call引用lua脚本的返回值是table?结果的下标是什么?

初学lua第一天,人快整没了
开篇答案:是返回结果,比如说redis.call(‘type’, KEYS[1])则返回的是{‘ok’=’hash’}

由于要求实现操作的原子性,因此使用lua来实现redis的一些操作,脚本传入一个key,但不知道他的种类就无法确定用哪种方法去get,于是写了一个lua脚本。

...
local res = {}
local t = redis.call('type', KEYS[1])
if t == 'hash' then
 res = redis.call('hgetall', KEYS[1], 0, -1)
end
...
~其他if肢~
...
return res

想当然的运行之后发现只返回了个寂寞,查了一下发现是根本就没进if肢,即t根本不等于’hash’,或者其他的所有类型,于是把返回值直接设成t。

local t = redis.call('type', KEYS[1])
return t

结果是[‘hash’],这就清楚了嘛,返回了个table,第一个值就是结果,于是这次用t[1]来判断类型,一运行还是返回了个寂寞。然后整了一下午用了各种方法都不能在lua内部把这个该死的’hash’整出来,包括什么concat、insert、tostring都不行,最后发现就是不知道这个table里边value是hash的key是什么,反正不是1,也不是0,最后网上看了半天才发现了把key打印出来的方法:

for key, value in pairs(t) then
print(key, value)
end

最后坑爹的发现key居然是’ok’,行吧,我ok个尖儿。
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值