初学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个尖儿。

redis aof 回滚 redis.call返回值_redis aof 回滚