Laravel 队列执行频率限制

说明:这是laravel官方提供的办法,我写出来是因为我在百度和必应都搜不到正确答案
官方文档:队列《Laravel 5.8 中文文档》
laravel 5.6+

1、每分钟限制执行10次JOB(注意是JOB,而不是整个队列)

use Illuminate\Support\Facades\Redis;
Redis::throttle('key')->allow(10)->every(60)->then(function () {
    // 任务逻辑...
}, function () {
    // 无法获得锁...

    return $this->release(10);
});

2、并发,限制同一时间只执行一个JOB

Redis::funnel('key')->limit(1)->then(function () {
    // 任务逻辑...
}, function () {
    // 无法获得锁...

    return $this->release(10);
});

方法里的参数key是自定义的redis key,如果需要多个job共用一个限制,则可以使用同一个key

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3

请问有测试吗,exception 'Predis\ClientException' with message 'Command 'THROTTLE' is not a registered Redis command.',我的报这个错,redis没有这个命令

5年前 评论
y-ui (楼主) 5年前

不会用呀,能写详细一些么,这就是文档上说的呀,这个代码应该在哪里写呢

5年前 评论
y-ui (楼主) 5年前

收藏了,为什么我再laravel的api中没有看到这个方法呢?有没有相关文档 laravel.com/api/8.x/Illuminate/Sup...

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!