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

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

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

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

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

本文章首发在 Laravel China 社区
成为第一个点赞的人吧 :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 嗯,明白

暂无评论~~
您需要登陆以后才能留下评论!

Composer 中国全量镜像

Top 100 扩展包

Lumen 中文文档

Laravel 速查表

Laravel 中文文档

Laravel 项目开发规范

Laravel 开发环境部署

Elasticsearch-PHP 中文文档

Lumen 中文文档

GraphQL PHP 中文文档

社区文档撰写指南

TDD 构建 Laravel 论坛笔记

PHP PSR 标准规范

PHP 设计模式全集

Dingo API 中文文档