前言 用过Laravel的都知道,Laravel通过php artisan make:controller可以生成控制器,同样的夜可以用命令生成中间介和模型,那怎么自定义生成文件呢?...下面话不多说了,来一起看看详细的介绍吧 自定义方法如下: 1.创建command类 <?...Console\GeneratorCommand; class ServiceMakeCommand extends GeneratorCommand { /** * The console command...* * @var string */ protected $name = 'make:service'; /** * The console command description
); 上述 throttle:10,1 的含义是 1 分钟内最多只能访问 / 路由 10 次,超过限流上限,则返回 429 响应: 对于 Laravel 的 API 路由,默认使用了这个限流中间件(下面这段代码位于...下面我们来分析下 Laravel 路由限流中间件 throttle 的底层实现源码,看看它到底是怎么实现限流器的。...它是基于缓存系统驱动的,目前的缓存驱动是 Redis,所以最终也是基于 Redis 实现的。...在响应头中,会添加访问上限和剩余可用访问次数字段: 小结 这只是 Redis 限流器的最简单实现版本,除此之外,还可以基于时间窗口和漏斗算法实现更加高级的限流器,Laravel 队列系统中的频率限制功能就是基于这种限流器实现的...,下篇教程,学院君就来给大家介绍如何实现更高级的 Redis 限流器及其在 Laravel 底层的实现源码。
二、配置文件 我们仍然从配置文件开始,首先我们需要在配置文件中配置默认队列驱动为Redis。lumen没有配置文件,可以从laravel项目中拷贝一份config目录过来。...connections配置项包含了Laravel支持的所有队列驱动,我们使用Redis驱动,所以需要配置redis项:connection对应config/database.php中redis的default...如果不能获取锁,需要将任务释放回队列以便可以再次执行: Redis::throttle('key')->allow(10)->every(60)->then(function () { // Job...)s_%(process_num)02d command= php /home/forge/app.com/artisan queue:work redis --sleep=3 --tries=3 -...当然,你需要修改 queue:work sqs 的 command 指令来映射你的队列连接。
Laravel 5.8 的完整发行说明可在 Github v6 changelog 中找到: Laravel v6.0.4 版本 新增 添加了 TestResponse::assertJsonPath(...修复了 __() 和 null 参数 (#29967) 修复了在自定义数据透视模型上修改 updated_at 列的问题 (#29970) 修复了 Illuminate\Redis\Limiters\...ConcurrencyLimiter (#30005) 修复了 Responsable 接口的响应对象实例时的 VerifyCsrfToken 中间件 (#29972) 修复了 Postgresql 列创建时没有可选精度的问题...(#29873) 修复了具有特定文件名的多路径迁移文件 (#29996) 修复了在测试中向 allowed 异常添加 NotFoundHttpException 的问题(#29975) 变更 使通过...改进了从根目录生成类时按字母顺序对导入进行排序 (#29951) 重构 在根目录中将导入更改为 Alpha 排序 (#29954, #29958) 尽可能使用辅助函数 (#29959) 提高了 auth.throttle
Laravel 开发团队昨天发布了 v6.10 版本,本次版本发布包含 11 个新特性以及大量的问题修复、功能废弃和代码优化,另外,还引入了对 PHPUnit 9 的支持。...支持 PHPUnit 9 从 v6.10 开始,Laravel 开始支持 PHPUnit 9,可以通过完整的 pull request 查看实现细节:https://github.com/laravel...Redis 连接类支持定义宏方法 和 Laravel 框架中其他支持 macro 方法的类一样,现在可以在 Redis Connection 上调用 macro 定义宏方法: use Illuminate...Connection 支持定义宏方法 新增 PackageManifest::config() 方法 在容器中新增 redis.connection 别名 从 Illuminate\Console\Command...修复 Blueprint 中 float 数据库字段类型 修复依赖 getenv() 的代码 防止在重连时进行实际的 PDO 连接 修复针对嵌套数据的 exclude_if/exclude_unless
2020年9月8号,Laravel发布了8.0版本。Laravel计划于2022年1月25日发布9.0版本。...组件,Tailwind 分页视图, 时间测试助手,artisan serve 的改进,事件监听器的改进,以及各种其他错误修复和可用性改进,对 Laravel 7.x 继续进行了改善。...的请求速率限制器得到了增强,具有更大的灵活性和功能,同时兼容上一个版本的 throttle 中间件。...Limit::none() : Limit::perMinute(100)->by($request->ip()); }); 使用 throttle 中间件 将刚刚创建的速率限制器绑定到路由或者路由组就可以了...将速率限制器的名称传入中间件来进行绑定: Route::middleware(['throttle:uploads'])->group(function () { Route::post('/audio
访问控制(节流) Laravel 包含了一个 middleware 用于控制应用程序对路由的访问。如果想要使用, 请将 throttle 中间件分配给一个路由或者一个路由组。...throttle 中间件会接收两个参数,这两个参数决定了在给定的分钟数内可以进行的最大请求数。...例如,让我们指定一个经过身份验证并且用户每分钟访问频率不超过 60 次的路由组: Route::middleware('auth:api', 'throttle:60,1')->group(function...队列 Laravel 队列为不同的后台队列服务提供统一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库的队列。...每一种队列驱动的配置都可以在该文件中找到,包括数据库,Beanstalkd ,Amazon SQS,Redis,以及同步(本地使用)驱动。其中还包含了一个 null 队列驱动用于那些放弃队列的任务。
在演示如何实现消息队列之前,我们先来简单介绍下上面的三个组件。...=redis 这样一来,Laravel 就可以基于 config/queue.php 中的 redis 配置初始化队列系统了: 'redis' => [ 'driver' => 'redis'...任务类推送和处理的完整链路 了解了 Laravel 队列系统底层实现原理后,我们再来看如何在业务代码中使用它。还是以文章浏览数更新为例,按照队列->消息->处理进程三个组件循序实现,方便对比理解。...($post)) 也可以推送任务类到 Redis 队列,不过使用 dispatch 方式更加优雅、稳健,不需要我们额外去处理任务类校验、延迟推送如何处理、如何推送到自定义队列、应用队列消息处理中间件等,...如果你在队列消息被处理之前去查看其数据结构(默认位于 laravel_database_queues:default 中): 可以看到这个是一个经过 JSON 序列化后的消息数据: job 对应的是如何处理这个消息数据
意思就是当 Redis 的 key 删除是,回主动通知发送消息给我们,我们只需要监听订阅对应的事件即可。 接下来我还原事情经过。说一下我遇到的问题,以及最后是如何解决的。...Redis; class OrderExpire extends Command { /** * The name and signature of the console command...最后解决方案如下: 解决方案 不使用 Laravel 自带的 Redis 门面,改为原生 Redis 。...我猜是 Laravel 的门面 Illuminate\Support\Facades\Redis ,这个订阅可能需要配合 发布一起使用。...但是我不清楚这个事件订阅如何起作用,总不能直接发布 Redis::publish('test-channel', json_encode(['foo' => 'bar'])); 吧?
支持政策 对于 LTS 版本,例如 Laravel 6,提供了 2 年的错误修复和3年的安全修复。这些版本提供了最长的支持和维护窗口。...对于一般的发行版本,只提供了 6 个月的错误修复和 1 年的安全修复。对于包括 Lumen 在内的所有其他版本,只有最新版本才会修复错误。此外,请查阅 Laravel 支持的 数据库版本。...* * @var array */ protected $casts = [ 'options' => Json::class, ]; } 要学习如何实现自定义...* * @return void */ public function handle() { Redis::throttle('key')->allow...return $this->release(10); }); } } 在此示例中,如果应用程序无法获得 Redis 锁,则该任务将释放十秒钟,并将继续重试 25 次。
Laravel 任务调度的入口代码 可以看到,Laravel 调度任务的基本使用非常简单,下面我们来看看它的底层是如何实现的,以及这与我们所要介绍的 Redis 分布式锁又有何关联。...($command, array $parameters = []) { if (class_exists($command)) { $command = Container::...那么如何在运行 schedule:run 时获取到当前已到期的调度任务去执行呢?...Redis 的分布式锁。...关于 Laravel 调度任务的底层实现和 Redis 分布式锁在这里的应用,学院君就介绍到这里,下篇教程,我们一起来探索如何通过 Redis 实现应用的限流功能。
更高级的限流器设计 上篇教程学院君给大家演示了如何通过 Redis 的字符串数据结构实现限流器,其中需要用到两个字符串键值对:一个用于设置单位时间窗口内的请求上限,另一个用于在这个时间窗口内对请求数进行统计...Redis 高级限流器的 Laravel 实现 在 Laravel 底层的 Redis 组件库中,已经通过 PHP 代码为我们实现了这两种限流器: ?...另外,需要注意的是不同于路由限流中间件 throttle,这里的 Redis 键不是基于用户标识的,而是基于文章 ID 标识的,所以会统计所有用户针对指定文章详情页的访问次数。...这一点,在 Laravel 队列文档中已有体现。...关于 Redis 限流器我们就简单介绍到这里,下一篇教程,我们一起来看看如何通过 Redis 实现用户 UV 统计功能。 本系列教程首发在Laravel学院(laravelacademy.org)
今天我们从Laravel启动的第一步开始讲起。.../bootstrap/app.php'; 获取app是laravel启动的关键,也可以说app是用于启动laravel内核的钥匙?。...QueueManager::class, \Illuminate\Contracts\Queue\Factory::class, \Illuminate\Contracts\Queue\Monitor::class] redis...[\Illuminate\Redis\RedisManager::class, \Illuminate\Contracts\Redis\Factory::class] 等等 ......::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' = [ 'throttle
今天我们从Laravel启动的第一步开始讲起。.../bootstrap/app.php'; 获取$app是laravel启动的关键,也可以说$app是用于启动laravel内核的钥匙?。...::class, \Illuminate\Contracts\Queue\Factory::class, \Illuminate\Contracts\Queue\Monitor::class] – redis...[\Illuminate\Redis\RedisManager::class, \Illuminate\Contracts\Redis\Factory::class] – 等等 ......Routing\Middleware\SubstituteBindings::class, ], 'api' => [ 'throttle
Redis; class RedisPublish extends Command { /** * The name and signature of the console command...command description...* Create a new command instance...与服务端 Redis 建立连接并通过 SUBSCRIBE 指令订阅 laravel_database_test-channel 频道(laravel_database_ 是 Laravel Redis...methods: ["GET", "POST"] } }); 重启 Websocket 服务器,这个时候就可以看到 Websocket 连接建立成功了: Websocket 连接如何建立的细节可以参考学院君网站网络协议部分从
本文实例讲述了Laravel框架处理用户的请求操作。...例如中间件组api包括两个中间件throttle:60,1与bindings 'api' = [ 'throttle:60,1', 'bindings', ], $routeMiddleware...Auth\Middleware\Authorize::class, 'guest' = \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle...session默认使用文件来驱动的,可以在config/session.php中修改其驱动方式为redis或者数据库。...》 希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。
访问频率限制中间件throttle的使用 1、访问频率限制概述 频率限制经常用在API中,用于限制独立请求者对特定API的请求频率。...注意:每个API都会选择一个自己的频率限制时间跨度,GitHub选择的是1小时,Twitter选择的是15分钟,Laravel中间件选择的是1分钟。...2、如何使用Laravel的访问频率限制中间件 在Laravel 5.2的新特性中,你可以使用一个新的中间件 throttle,让我们先来看看这个中间件的用法,首先我们定义一个路由规则如下: Route...添加到其中,throttle默认限制每分钟尝试60次,并且在一分钟内访问次数达到60次后禁止访问: Route::group(['prefix'=>'api','middleware'=>'throttle...原因如下: laravel框架api路由默认加载 throttle中间件,该中间件限制了一分钟内访问api的次数: 注释掉这行之后就取消了访问的限制 第一个参数 60 代表每分钟限制 60 次请求
本来规划开始更新 Redis 底层实现、数据结构和高性能原理了: 不过考虑到如何安全使用 Redis 也是这个比较基础的东西,新手如果配置不当,很容易造成线上的 Redis 服务处于「裸跑」状态,被黑客恶意攻击...关于端口安全问题造成的线上事故案例,可以阅读学院君之前发布的这篇教程:Laravel 学院今天凌晨四点到上午十点不能访问问题定位及修复细节通报。...为了规避这个问题,我们可以在 Redis 服务端配置文件中通过 rename-command 配置项对这种危险指令进行重命名: rename flushdb flush_this_db rename flushall...关于恶意用户批量发布内容导致 Redis 内存耗尽的案例,可以阅读学院君之前发布的这篇教程:Laravel 学院今天下午两点半到三点半期间不能访问问题定位及修复细节报告。...最后,我们来看如何对 Redis 客户端与服务端的通信内容进行加密,避免数据被窃取和篡改,限于篇幅,学院君将在下篇教程给大家详细演示。
predis是用PHP语言写的一个redis客户端包,Laravel的Redis模块依赖于这个包。...Redis::command('SISMEMBER', [$ipPostViewKey, $ip]); if(!...1 $incre_count = Redis::command('HINCRBY', [$cacheKey, $ip, 1]); //redis中这个存储浏览量的值达到...::command('DEL', ['laravel:post:cache:'....::command('HSET', [$cacheKey, $ip, '1']); } } } 这里推荐下一本Redis入门书《Redis入门指南》(作者也是北航的,软件学院的)
Laravel 官方开发组本周发布了 Laravel 6.11.0 版本,新版本在 Eloquent 模型查询时新增 firstWhere 方法,优化了基于 Redis 的多频道广播,以及一些现有版本的问题修复...优化 Redis 多频道广播 在 Laravel 应用中,一次发送事件到多个频道很常见,目前,我们的做法是通过多个发布命令发送完全一样的负载数据到指定 Redis 服务器,这将导致不必要的数据传输,从而带来通信及性能损耗...所以,最新版本的 Laravel 优化了这个问题,在 RedisBroadcaster 中添加一段 Lua 脚本,允许一次广播数据到多个频道: 2、更新日志 接下来,我们来大致看一下此次版本更新的详细日志...新增特性 新增 Illuminate\Database\Eloquent\Builder::firstWhere() 方法 Redis 支持一次广播数据到多个频道 问题修复 修复 WithFaker:...:makeFaker() 中的未定义属性 修复 Str::afterLast() 方法 修复 PHP 7.3 插入浮点类型到 MySQL 数据库问题 修复通过自定义中间表属性名刷新模型问题 代码调整 在
领取专属 10元无门槛券
手把手带您无忧上云