beyondcode/laravel-fixed-window-limiter

此包已被弃用且不再维护。未建议替代包。

Laravel 和 Redis 的固定窗口速率限制

1.2.0 2020-01-28 08:44 UTC

This package is auto-updated.

Last update: 2024-01-09 09:56:46 UTC


README

Latest Version on Packagist Build Status Quality Score Total Downloads

此包允许您轻松地使用固定窗口算法创建和验证速率限制。

此包使用了 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)。请参阅 许可证文件 了解更多信息。