webman Redis::eval() 使用报错

橘叔
 public static function unlock($name = '', $token = '')
    {
        $args = ['redis-lock' . $name, $token];
        return Redis::eval(self::getReleaseLuaScript(), $args, 1);
    }
public static function getReleaseLuaScript(): string
    {
        return <<<LUA
if redis.call("get",KEYS[1]) == ARGV[1]
then
    return redis.call("del",KEYS[1])
else
    return 0
end
LUA;
    }
咨询一下大佬,我想在webman中使用redis锁,但是使用lua的原子性直接报错

ErrorException: Redis::eval() expects parameter 3 to be int, array given in /Users/xxx/php/webman_jinrong/vendor/illuminate/redis/Connections/Connection.php:116
我到底层去打印最终的eval的数据的时候发现 args 和 key 是反过来了是为什么
905 4 0
4个回答

码龍

Redis::eval() expects parameter 3 to be int, array given in

整形传成了数组

  • 暂无评论
Tinywan

哈哈!这个问题刚开始也遇到了,本以为是 illuminate/redis 扩展库的问题。推荐使用 evalSha

  • 暂无评论
Tinywan

如果使用Redis做延迟任务队列,原生的是可以支持的,但是使用evalSha 依然不会触发任务。写了一个完整的项目,感觉这个Redis不是太友好,自己重新封装了一个

  • 暂无评论
年代过于久远,无法发表回答
🔝