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 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 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年前 评论

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