ph4r05 / laravel-queue-database-ph4
使用乐观锁的 Laravel 数据库队列驱动程序
v0.1.6
2020-11-01 15:54 UTC
Requires
- php: ^7.2
- illuminate/database: 6.*
- illuminate/queue: 6.*
- illuminate/support: ^6.2
Requires (Dev)
- ext-json: *
- mockery/mockery: ~1.0
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2024-09-15 21:01:28 UTC
README
使用乐观锁实现的 Laravel 数据库队列。增加并发性,消除死锁。
安装
- 使用 composer 安装此包:
composer require ph4r05/laravel-queue-database-ph4
- 创建工作表
php artisan queue_ph4:table php artisan migrate
- 队列配置
<?php // config/queue.php return [ 'database_ph4' => [ 'driver' => 'database_ph4', 'table' => 'jobs_ph4', 'queue' => 'default', 'retry_after' => 4, 'num_workers' => 1, 'window_strategy' => 1, ], ];
num_workers
应该与队列中处理工作的工作进程数量相对应。窗口策略
.- 0 表示工作进程选择一个可用的作业进行处理。吞吐量较小,作业顺序与悲观锁类似。
- 1 表示工作进程将选择
num_workers
个下一个可用的作业,并随机选择一个。吞吐量较高,作业顺序略有调整(更多详情请参阅 博客)
要使用乐观锁,现在可以更改您的 .env
QUEUE_DRIVER=database_ph4
使用方法
完成配置后,您可以使用 Laravel 队列 API。如果您使用了其他队列驱动程序,则无需更改任何其他内容。如果您不知道如何使用队列 API,请参阅官方 Laravel 文档:https://laravel.net.cn/docs/queues
测试
使用以下命令运行测试:
vendor/bin/phpunit
关于乐观锁的博客文章
https://ph4r05.deadcode.me/blog/2017/12/23/laravel-queues-optimization.html
优点
- 无需显式事务。单条查询自动提交事务即可。
- 无数据库级别锁定,因此无死锁。也适用于没有死锁检测的数据库(较老的 MySQL)。
- 作业执行正好一次(与悲观默认数据库锁定相对比)
- 高吞吐量。
- 在 MySQL、PostgreSQL、Sqlite 上进行了测试。
缺点
- 在多个工作进程的情况下,作业顺序可能会略有偏移(10,000 个作业中重新排序 0-70)
贡献
您可以通过发现错误和提交问题来为此包做出贡献。请务必在您创建的 pull request 或问题中添加包的版本。
捐赠
感谢您的所有支持!
Monero
87iMuZKqgBZbxjvjJaieTqLBsW3VKtkiuRXL2arcr8eiL4eK8kFi4QbaXCXGgmNWYp5Linpd9pj5McFZ8SQevkenGuZWMCT
Bitcoin
17hzavLCXqavzmWEEjtX54VeCJVmbrHZQC