Stars: 253
Forks: 43
Pull Requests: 34
Issues: 21
Watchers: 11
Last Updated: 2023-04-20 00:12:07
🚔 General purpose rate limiter implementation.
License: MIT License
Languages: PHP
General purpose rate limiter that can be used to limit the rate at which certain operation can be performed. Default implementation uses Redis as backend.
The preferred method of installation is via Composer. Run the following
command to install the latest version of a package and add it to your project's composer.json
:
composer require nikolaposa/rate-limit
Terminating rate limiter
use RateLimit\Exception\LimitExceeded;
use RateLimit\Rate;
use RateLimit\RedisRateLimiter;
use Redis;
$rateLimiter = new RedisRateLimiter(Rate::perMinute(100), new Redis());
$apiKey = 'abc123';
try {
$rateLimiter->limit($apiKey);
//on success
} catch (LimitExceeded $exception) {
//on limit exceeded
}
Silent rate limiter
use RateLimit\Rate;
use RateLimit\RedisRateLimiter;
use Redis;
$rateLimiter = new RedisRateLimiter(Rate::perMinute(100), new Redis());
$ipAddress = '192.168.1.2';
$status = $rateLimiter->limitSilently($ipAddress);
echo $status->getRemainingAttempts(); //99
Practical usage with configuring multiple rate limiting strategies in a project
use RateLimit\Rate;
use RateLimit\RedisRateLimiter;
$container->set('rate_limiter.api', new RedisRateLimiter(Rate::perSecond(10), $container->get('redis')));
$container->set('rate_limiter.videos', new RedisRateLimiter(Rate::perDay(5), $container->get('redis')));
Released under MIT License - see the License File for details.