webman 官方限流组件 1.0 发布!
webman 官方限流组件 1.0 发布!
简介webman限流器,支持注解限流。 支持apcu、redis、memory驱动。安装代码语言:javascript代码运行次数:0运行复制composer require webman/rate-limiter
使用代码语言:javascript代码运行次数:0运行复制<?php
namespace app\controller;
use
webman 官方限流组件 1.0 发布!
webman限流器,支持注解限流。 支持apcu、redis、memory驱动。
composer require webman/rate-limiter
<?php
namespace app\controller;
use Webman\RateLimiter\Annotation\RateLimiter;
use Webman\RateLimiter\Limiter;
/**
* test-users
*/
class UserController
{
#[RateLimiter(limit: 10)]
public function index(): string
{
// 默认为IP限流,默认单位时间为1秒
return '每个ip每秒最多10个请求';
}
#[RateLimiter(limit: 100, ttl: 60, key: RateLimiter::UID)]
public function search(): string
{
// key: RateLimiter::UID,以用户ID为维度进行限流,要求session('user.id')不为空
return '每个用户每分钟最多100次搜索';
}
#[RateLimiter(limit: 1, ttl: 60, key: RateLimiter::SID, message: '每人每分钟只能发一次邮件')]
public function sendMail(): string
{
// key: RateLimiter::SID,以session_id为维度进行限流
return '每人每分钟只能发一次邮件';
}
#[RateLimiter(limit: 100, ttl: 24 * 60 * 60, key: 'coupon', message: '今天的优惠券已经发完,请明天再来')]
public function coupon(): string
{
// key: 'coupon', 这里coupon为自定义key,也就是全局以coupon为key进行限流
return '优惠券发送成功';
}
public function sendCms(string $mobile): string
{
// 当key为变量时,可以使用如下代码手动限流,这里mobile作为key
Limiter::check($mobile, 5, 24 * 60 * 60, '每个手机号一天最多5条');
return '发送成功';
}
#[RateLimiter(limit: 5, ttl: 24 * 60 * 60, key: [UserController::class, 'getMobile'], message: '每个手机号一天最多5条')]
public function sendCms2(): string
{
// 当key为变量时,可以使用[类, 方法]的方式获取key,例如[UserController::class, 'getMobile']会调用UserController的getMobile()方法的返回值为key
return '发送成功';
}
/**
* 自定义key,获取手机号
* @return string
*/
public static function getMobile(): string
{
return request()->get('mobile');
}
}
代码语言:javascript代码运行次数:0运行复制开源技术小栈config/plugin/webman/rate-limiter/app.php
<?php
return [
'enable' => true,
'driver' => 'auto', // auto, apcu, memory, redis
'stores' => [
'redis' => [
'connection' => 'default',
]
],
// 这些ip的请求不做频率限制
'ip_whitelist' => [
//'127.0.0.1',
],
];
- enable:是否开启限流
- driver:
auto
,apcu
,memory
,redis
中的一个值,使用auto
时会自当在apcu
和redis
中选一个值 - stores:redis配置
connection
对应config/redis.php
中对应的值 - ip_whitelist:白名单的ip不会被限流(只在key为
RateLimiter::IP
时有效)
memory
- 介绍:无需安装任何扩展,性能最好。
- 使用限制:限流只对当前进程有效,多个进程间不共享限流数据,同时也不支持集限流。
- 试用场景:windows开发环境、不需要严格限流的业务、抵御CC攻击时。
apcu
- 安装扩展:当
driver
使用apcu
时,需要安装apcu
扩展,并且php.ini
中设置
=1
_cli=1
如果不知道php.ini
位置,可以通过命令php --ini
寻php.ini
的位置
- 介绍:性能略低于memory,支持多进程共享限流数据。
- 使用限制:不支持集
- 使用场景:任何开发环境、线上单机限流场景;、集不需要严格限流的场景、抵御CC攻击。
redis
- 依赖:需要安装redis扩展,并安装Redis组件,安装命令
composer require -W illuminate/redis illuminate/events
- 介绍:性能低于apcu,支持单机也支持集精确限流
- 适用场景:开发环境、线上单机环境、集环境。
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-27 02:22:21
上一篇:Windows 底层大改!
推荐阅读
留言与评论(共有 15 条评论) |
本站网友 modelandview | 23分钟前 发表 |
本站网友 牧师与恶魔 | 16分钟前 发表 |
apcu | |
本站网友 冰糖雪梨 | 22分钟前 发表 |
方法]的方式获取key | |
本站网友 flash怎么下载 | 25分钟前 发表 |
'每人每分钟只能发一次邮件')] public function sendMail() | |
本站网友 qq资源 | 30分钟前 发表 |
ttl | |
本站网友 抽羊水 | 21分钟前 发表 |
并安装Redis组件 | |
本站网友 大夫在我国古代是指 | 5分钟前 发表 |
string { // 当key为变量时 | |
本站网友 尸横遍野 | 8分钟前 发表 |
check($mobile | |
本站网友 红豆杉的功效与作用 | 20分钟前 发表 |
'每个手机号一天最多5条'); return '发送成功'; } #[RateLimiter(limit | |
本站网友 朗文词典 | 22分钟前 发表 |
RateLimiter | |
本站网友 英国关闭餐厅酒吧 | 5分钟前 发表 |
key | |
本站网友 wcg比赛项目 | 9分钟前 发表 |
24 * 60 * 60 | |
本站网友 福州商铺 | 30分钟前 发表 |
同时也不支持集限流 | |
本站网友 aigou | 27分钟前 发表 |
并安装Redis组件 |