• 技术文章 >后端开发 >php教程

    可用于PHP Hyperf的计数器限流组件(安装配置)

    藏色散人藏色散人2022-01-18 10:18:30转载425
    本篇文章给大家介绍关于适用于 Hyperf 的计数器限流组件。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

    说明

    BETA

    移植了 Laravel Cache 组件的 rate-limiter.

    并对 \Psr\SimpleCache\CacheInterface 进行了补充. 增加了以下方法:

    安装

    composer require wilbur-yu/hyperf-cache-ext

    配置

    1. 修改cache配置文件:

    'default' => [
        'driver' => WilburYu\HyperfCacheExt\Driver\RedisDriver::class,
        'packer' => WilburYu\HyperfCacheExt\Utils\Packer\PhpSerializerPacker::class,
        'prefix' => env('APP_NAME', 'skeleton').':cache:',
    ],
    'limiter' => [
        'max_attempts' => 5,  // 最大允许次数
        'decay_minutes' => 1, // 限流单位时间
        'prefix' => 'counter-rate-limit:', // key 前缀
        'for' => [
            'common' => static function (\Hyperf\HttpServer\Contract\RequestInterface $request) {
                return Limit::perMinute(3);
            },
        ],
        'key' => ThrottleRequest::key(),
    ],

    2. 在exceptions配置文件中增加:

    \WilburYu\HyperfCacheExt\Exception\Handler\CounterRateLimitException::class

    可选, 也可自行捕获, 该异常自带一个 getHeaders 方法, 值为: array(‘X-RateLimit-Limit’, ‘X-RateLimit-Remaining’, ‘Retry-After’, ‘X-RateLimit-Reset’)

    使用

    在控制器中使用计数器限速注解

    #[CounterRateLimitWithRedis(maxAttempts: 5, decayMinutes: 1)]or#[CounterRateLimit(for: "common")]

    注解参数同配置文件, 优先级为注解>配置>默认.
    使用 for 时, max_attemptsdecay_minutes 不起作用.

    如果你的缓存驱动不是 redis, 可以使用 CounterRateLimit 注解,反之则直接使用 CounterRateLimitWithRedis 注解即可.

    在其他地方使用限速时, 可以使用辅助函数 counter_limiter(), 使用方法同 laravel中的 RateLimiter Facade, 可参考 Laravel 限流文档

    $executed = counter_limiter()->attempt('send-sms:'.$user->id,2,function(){
        // send sms logic
    });
    if (!$executed) {
        return 'Too many messages sent!';
    }

    推荐学习:《PHP视频教程

    以上就是可用于PHP Hyperf的计数器限流组件(安装配置)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:learnku,如有侵犯,请联系admin@php.cn删除
    专题推荐:php Hyperf
    上一篇:PHP+Redis解决缓存击穿的实际问题 下一篇:PHP_CodeSniffer是什么?如何安装使用?

    相关文章推荐

    • 图文详解php怎么平滑升级• 初学者有关问题,PHP简单函数有关问题 • 关于字符串的操作,可能需要用到正则,觉得很复杂解决思路 • 这个模板引擎怎么样?• Yii2分页的使用及其扩展方法详解,yii2分页扩展详解_PHP教程

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网