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 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3

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

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

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

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

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

3年前 评论

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