当我通过redis EVAL运行此代码时,它不会返回任何结果。知道为什么这行不通吗?
redis-cli EVAL "$(cat bug.lua)" 0
local retv = {} retv["test"] = 1000 return retv
如果我初始化表,则仅打印该值。
$ cat bug.lua --!/usr/bin/env lua local retv = {"This", "is", "a", "bug" } retv["test"] = 1000 return retv $ redis-cli EVAL "$(cat bug.lua)" 2 a b 1) "This" 2) "is" 3) "a" 4) "bug"
如果您参考Redis EVAL文档,则可以看到Redis将Lua表转换为Redis回复所使用的规则:
EVAL
因此,除了特殊情况2和3之外,Redis假设您的表是一个序列(即列表),这意味着它会retv[1], retv[2], ...一直读取直到遇到一个nil元素(此处是相应的源代码部分)。
retv[1], retv[2], ...
nil
这解释了为什么retv["test"]在您的情况下会被忽略。
retv["test"]
如果您使用以下方法更改代码:
local retv = {"This", "is", "a", "bug" } retv[5] = 1000 return retv
然后,此附加元素被返回:
1) "This" 2) "is" 3) "a" 4) "bug" 5) (integer) 1000