Laravel Queue 模块中,Redis 作为 broker 时,使用 LuaScripts 的原因是什么?

问答 baocaixiong ⋅ 于 1年前 ⋅ 最后回复由 baocaixiong 1年前 ⋅ 1494 阅读

https://github.com/laravel/framework/blob/5.3/src/Illuminate/Queue/RedisQueue.php#L138

已知Redis 2.6.0版本开始已经支持使用内置的 Lua 解释器,可以对 Lua 脚本进行求值。

看来laravel已经默认放弃了低版本的Redis了

成为第一个点赞的人吧 :bowtie:
回复数量: 2
  • song 1
    1年前

    LuaScripts::pop()封装了一系列redis以及数据处理操作

        public static function pop()
        {
            return <<<'LUA'
    local job = redis.call('lpop', KEYS[1])
    local reserved = false
    if(job ~= false) then
        reserved = cjson.decode(job)
        reserved['attempts'] = reserved['attempts'] + 1
        reserved = cjson.encode(reserved)
        redis.call('zadd', KEYS[2], ARGV[1], reserved)
    end
    return {job, reserved}
    LUA;
        }

    用lua脚本来执行这些操作可以保证原子性并且提高执行效率 http://redis.io/commands/EVAL#atomicity-of-scripts

  • baocaixiong
    1年前

    @song 嗯,明白

暂无评论~~

  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!