您现在的位置是:首页 > 编程 > 

webman 官方限流组件 1.0 发布!

2025-07-29 15:05:34
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驱动。

安装代码语言:javascript代码运行次数:0运行复制
composer require webman/rate-limiter
使用代码语言:javascript代码运行次数:0运行复制
<?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');
    }

}
配置

开源技术小栈config/plugin/webman/rate-limiter/app.php

代码语言:javascript代码运行次数:0运行复制
<?php
return [
    'enable' => true,
    'driver' => 'auto', // auto, apcu, memory, redis
    'stores' => [
        'redis' => [
            'connection' => 'default',
        ]
    ],
    // 这些ip的请求不做频率限制
    'ip_whitelist' => [
        //'127.0.0.1',
    ],
];
  • enable:是否开启限流
  • driverauto,apcu,memory,redis中的一个值,使用auto时会自当在apcuredis中选一个值
  • stores:redis配置connection对应config/redis.php中对应的值
  • ip_whitelist:白名单的ip不会被限流(只在key为RateLimiter::IP时有效)
driver选择

memory

  • 介绍:无需安装任何扩展,性能最好。
  • 使用限制:限流只对当前进程有效,多个进程间不共享限流数据,同时也不支持集限流。
  • 试用场景:windows开发环境、不需要严格限流的业务、抵御CC攻击时。

apcu

  • 安装扩展:当driver使用apcu时,需要安装apcu扩展,并且php.ini中设置
代码语言:javascript代码运行次数:0运行复制
=1
_cli=1

如果不知道php.ini位置,可以通过命令php --iniphp.ini的位置

  • 介绍:性能略低于memory,支持多进程共享限流数据。
  • 使用限制:不支持集
  • 使用场景:任何开发环境、线上单机限流场景;、集不需要严格限流的场景、抵御CC攻击。

redis

  • 依赖:需要安装redis扩展,并安装Redis组件,安装命令
代码语言:javascript代码运行次数:0运行复制
composer require -W illuminate/redis illuminate/events
  • 介绍:性能低于apcu,支持单机也支持集精确限流
  • 适用场景:开发环境、线上单机环境、集环境。
本文参与 腾讯云自媒体同步曝光计划,分享自。原始发表:2024-12-16,如有侵权请联系 cloudcommunity@tencent 删除变量集开发环境性能

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1240960.html

相关标签:无
上传时间: 2025-07-27 02:22:21
留言与评论(共有 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组件