Yii2 Rate Limiter ¶
Backends ¶
Memcached
requires memcached extension.Redis
requires redis extension or yiisoft/yii2-redis package.
Installation ¶
composer require razonyang/yii2-rate-limiter
Usage ¶
Let's take 5000 requests every hours as example:
return [
public function behaviors()
{
return [
// redis via redis extension
'rateLimiter' => [
'class' => \RazonYang\Yii2\RateLimiter\RedisRateLimiter::class,
'password' => '',
'hostname' => 'localhost',
'port' => 6379,
'capacity' => 5000,
'rate' => 0.72,
'limitPeriod' => 3600,
'prefix' => 'rate_limiter:',
'ttl' => 3600,
// 'nameCallback' => $callback,
],
// redis via yii2-redis
'rateLimiter' => [
'class' => \RazonYang\Yii2\RateLimiter\Redis\RateLimiter::class,
'redis' => 'redis', // redis component name or definition
'capacity' => 5000,
'rate' => 0.72,
'limitPeriod' => 3600,
'prefix' => 'rate_limiter:',
'ttl' => 3600,
// 'nameCallback' => $callback,
],
// memcached
'rateLimiter' => [
'class' => \RazonYang\Yii2\RateLimiter\MemcachedRateLimiter::class,
'hostname' => 'localhost',
'port' => 11211,
'capacity' => 5000,
'rate' => 0.72,
'limitPeriod' => 3600,
'prefix' => 'rate_limiter:',
'ttl' => 3600,
// 'nameCallback' => $callback,
],
];
}
];
RateLimiter
takes uid:route
(authorized) or ip:route
(guest) as bucket name, you can also change this behavior via nameCallback
:
$nameCallback = function (
\yii\web\User $user,
\yii\web\Request $request,
\yii\base\Action $action
): string {
return 'bucket name';
}
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.