我创建了一个redis lua脚本来执行基于密钥数据类型的命令: -
local keyType = redis.call("TYPE", KEYS[1])
if (keyType == "string")
then
return redis.call("GET",KEYS[1])
else
return nil
end
每次执行时都返回null。可以帮助纠正脚本。
答案 0 :(得分:4)
对redis.call
的响应返回为如下所示的表:{"ok": "string"}
(如果类型是字符串)
因此,为了正确检查,您应该将代码更改为:
local keyType = redis.call("TYPE", KEYS[1]).ok
并且其余代码可以正常工作。
问题是:TYPE命令是返回“简单字符串”或“状态”redis回复的少数命令之一(请参阅redis protocol specs了解响应类型)。在redis lua文档中,它声明:
Redis状态回复 - > Lua表包含一个包含状态
的ok字段
这是发生在这里的事情。
答案 1 :(得分:0)
也可以使用[1]。localkeyType = redis.call(“ TYPE”,KEYS [1])返回keyType [1]