jdimitrov / php-ratelimit
基于漏桶算法的PHP速率限制库
0.3
2021-12-07 22:21 UTC
Requires
- php: ^7.1
Requires (Dev)
- phpunit/phpunit: ^7.0
- predis/predis: ^1.1
Suggests
- ext-redis: ^2.2
- predis/predis: ^1.1
This package is auto-updated.
Last update: 2024-09-08 04:21:11 UTC
README
具有最小外部依赖的基于漏桶算法的PHP速率限制库。
安装
composer require jdimitrov/php-ratelimit
存储适配器
PHP速率限制需要知道存储数据的位置。
根据您安装的适配器,您可能需要安装额外的库(predis/predis)或PHP扩展(例如Redis、Memcached、APC)
示例
添加uses
use JDimitrov\RateLimit\RateLimit;
use JDimitrov\RateLimit\Adapter\APC as APCAdapter;
use JDimitrov\RateLimit\Adapter\Redis as RedisAdapter;
use JDimitrov\RateLimit\Adapter\Predis as PredisAdapter;
use JDimitrov\RateLimit\Adapter\Memcached as MemcachedAdapter;
$adapter = new RedisAdapter((new \Redis()->connect('localhost'))); // Use Redis as Storage
// Alternatives:
//
// $adapter = new PredisAdapter(new \Predis\Predis(['tcp://127.0.0.1:6379'])); // Use Predis as Storage
//
// $memcache = new \Memcached();
// $memcache->addServer('localhost', 11211);
// $adapter = new MemcacheAdapter($memcache);
//
// $adapter = new APCAdapter(); // Use APC as Storage
$key = 'ratelimit';
// $key = 'ratelimit' . ':' . $_SERVER['REMOTE_ADDR']; // You can append identificator, if you want to narrow your limits to specific ip address or to something else
$rate_limit = new RateLimit($key, 100, 1, $adapter); // 100 requests per second
if ($rate_limit->check(30)) { // Try to consume 30 requests
// Success
} else {
// Failed (leaked bucket)
}