我写了一个小例子来解释我所面临的问题:
func (rc *redisClient) runDummyScript(ctx context.Context) bool {
scriptSha, err := rc.ScriptLoad(ctx, dummyScript).Result()
if err != nil {
return false
}
rs, err := rc.EvalSha(ctx, scriptSha, []string{}).Result()
if err != nil {
fmt.Print("could not execute the redis commands for ", err)
}
ans, _ := rs.(bool)
return ans
}
const dummyScript = `return false`
对于脚本返回true的情况,上面的方法runDummyScript
不会给出任何错误,但是对于脚本返回false的情况,这会给我一个错误"redis: nil"
。
我认为这是因为lua脚本将false
转换为nil
,因此EvalSha
将脚本返回的nil视为错误,这在我看来很奇怪。
为了解决这个问题,我必须忽略"redis: nil"
错误,这对我来说又是一个奇怪的问题,但是lua脚本返回布尔值似乎是一个很常见的操作,写一个解决方案对我来说似乎不是一个好的选择。
我很想知道如何使它正常工作。
谢谢!
1条答案
按热度按时间xlpyo6sf1#
我认为这是因为lua脚本将false转换为nil,因此EvalSha将脚本返回的nil视为错误,这在我看来很奇怪。
不- Redis会这么做。
使用Lua,您可以返回任意多的值/数据类型。
但是Redis似乎只处理数字(整数?)和字符串以及(EDIT)表DT。
一个简单的测试...
现在纯Lua(5.1)