beyondcode / laravel-fixed-window-limiter
Laravel 和 Redis 的固定窗口速率限制
Requires
- php: ^7.3
- illuminate/redis: 5.8.*|^6.0
- illuminate/support: 5.8.*|^6.0
- nesbot/carbon: ^2.0
- predis/predis: ^1.1
Requires (Dev)
- orchestra/testbench: ^3.8
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2024-01-09 09:56:46 UTC
README
此包允许您轻松地使用固定窗口算法创建和验证速率限制。
此包使用了 Redis 的原子请求。
安装
您可以通过 composer 安装此包
composer require beyondcode/laravel-fixed-window-limiter
用法
您可以通过调用 create
方法创建一个新的限制器实例,并传入一个表示时间窗口的 CarbonInterval,该时间窗口将用于限制器。第二个参数是在该时间段内限制器将接受的请求/尝试的最大数量。
$limiter = FixedWindowLimiter::create(CarbonInterval::second(2), 2);
对您的限制器运行尝试
一旦创建限制器,您可以对其进行尝试以查看调用是否在您指定的使用限制内。由于您的限制器可以用于多个资源,您需要在 attempt
方法调用中传递您想要尝试调用该资源的资源。
$limiter->attempt('user_1');
获取使用计数
当您想读取给定资源的尝试次数时,您可以调用 getUsage
方法。
注意:此方法不会返回尝试次数,只会返回成功尝试次数。如果您想查看所有尝试,包括被拒绝的尝试,请使用 getRealUsage
方法。
$count = $limiter->getUsage('user_1');
或者,如前所述,要获取资源所有尝试的实际使用情况
$count = $limiter->getRealUsage('user_1');
重置限制器
如果您想重置特定资源的尝试次数,您可以在限制器实例上调用 reset
方法。这将重置 TTL 到给定的时间段,并重新允许新的尝试。
$limiter->reset('user_1');
附加数据
有时您可能想在 Redis 中的资源散列中存储附加数据。您可以将初始数据传递给 reset
方法。
$limiter->reset('user_1', [ 'key' => 'value' ]);
为了检索数据,您可以使用 getAdditionalData
方法。
$value = $limiter->getAdditionalData('user_1', 'key');
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近发生了哪些变化。
贡献
请参阅 CONTRIBUTING 了解详情。
安全
如果您发现任何安全相关的问题,请通过电子邮件联系 marcel@beyondco.de,而不是使用问题跟踪器。
致谢
许可证
MIT许可证(MIT)。请参阅 许可证文件 了解更多信息。