大家好!使用官方限流组件最新版
5分钟5次我一直更新资料偶尔会报Too Many Requests 但是操作成功次数远远超过于5次,redis计数也没有跟着上涨有时候还会过期了。请问这是怎么回事呢?
// 更新用户资料
#[RateLimiter(limit: 5, ttl: 5 * 60, key: RateLimiter::IP, message: 'Too Many Requests', exception: LimiterException::class)]
<?php
use Webman\RateLimiter\Limiter;
return [
'' => [
Limiter::class,
],
];
<?php
return [
'enable' => true,
'driver' => 'redis', // auto, apcu, memory, redis
'stores' => [
'redis' => [
'connection' => 'default',
],
],
// 这些ip的请求不做频率限制
'ip_whitelist' => [
],
];

上面还有一堆操作成功的
为了更好的性能,webman/rate-limiter 是固定窗口算法。
如果你是按照5分钟来限流,那就是每5分钟为一个窗口,如果你的请求刚好发生在两个5分钟交界处,会有一定概率超过限制,但是把时间段拉长是可以保证平均每5分钟不会超过限制次数