codecamp

Laravel 8 速率限制

注意:该特性要求你的应用程序可以与 Redis 服务器 交互。

如果你的应用程序与 Redis 交互,你可能会根据时间或并发性限制排队任务。当排队的任务与同样有速率限制的 api 交互时,此特性可以派上用场。

例如,使用 throttle 方法,您可以将给定类型的作业限制为每 60 秒只运行 10 次。如果无法获得锁,通常应将任务释放回队列,以便稍后重试:

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

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

技巧:在上面的示例中, key 可以是唯一标识你希望对其进行速率限制的任务类型的任何字符串。例如,你可能希望基于任务的类名和它所操作的 Eloquent 模型的 id 来构造密钥。

注意: 将一个已被限流的任务释放回队列仍然会增加该任务的 attempts 的总数。

或者,你可以指定可以同时处理给定任务的 worker 的最大数量。当队列作业正在修改一个每次只能修改一个任务的资源时,这是很有用的。例如,使用 funnel 方法,你可以限制一个给定类型的任务一次只能由一个 worker 处理:

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

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

技巧:在使用速率限制时,很难确定任务成功运行所需的尝试次数。因此,将速率限制与 基于时间的尝试 结合起来是很有用的。


Laravel 8 超时
Laravel 8 错误处理
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Laravel 8 入门指南

Laravel 8 基础功能

Laravel 8 前端开发

Laravel 8 安全相关

Laravel 8 综合话题

数据库

Eloquent ORM

测试相关

官方拓展包

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }