Redis lua脚本未能工作

我已经创建了一个Redis lua脚本,可以根据键数据类型执行命令:-

local keyType = redis.call("TYPE", KEYS[1])
if (keyType == "string")
then
return redis.call("GET",KEYS[1])
else
return nil
end

每次执行时,它都返回null。 是否可以帮助我纠正脚本。

点赞
用户1239701
用户1239701

回应redis.call的回应看起来像这样的表格:{"ok": "string"}(如果类型是字符串的话)

因此,为了正确检查,你应该将你的代码更改为:

local keyType = redis.call("TYPE", KEYS[1]).ok

代码的其余部分将正常工作。

问题在于:TYPE命令是少数几个返回“简单字符串”或“状态”回应的命令之一(有关回应类型,请参见Redis协议规范)。在Redis Lua文档中指出:

Redis状态回应->带有包含状态的单个ok字段的Lua表

这就是这里发生的事情。

2016-02-10 16:51:06
用户11532099
用户11532099
使用 \[1\] 也可以工作。

local keyType = redis.call("TYPE", KEYS\[1\])
return keyType\[1\]
2019-05-21 08:23:31