可用於PHP Hyperf的計數器限流元件(安裝配置)

藏色散人
發布: 2023-04-10 21:10:02
轉載
5316 人瀏覽過

本篇文章要為大家介紹關於適用於 Hyperf 的計數器限流元件。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

說明

BETA

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

並對\Psr\SimpleCache\CacheInterface 進行了補充. 增加了以下方法:

  • increment
  • decrement
  • #add
  • put

安裝

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(),
],
登入後複製
  • for 即對應Laravel Facade RateLimiter::for(callable),

    在服務啟動時, 監聽器會收集該命名限制器陣列, 供在註解中使用for 參數參考. 在註解切面執行時, 會將目前請求\Hyperf\ HttpServer\Contract\RequestInterface 實例注入到該命名閉包.

  • key 預設為目前請求fullUrl ip . 支援字串與閉包.

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.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板