janfish / frequency-limiter
Frequency limiter base on token bucket algorithm
dev-master
2021-04-23 05:05 UTC
Requires
- php: >=5.4
- predis/predis: ^1.1
This package is not auto-updated.
Last update: 2025-03-07 02:46:59 UTC
README
Frequency limiter base on token bucket algorithm
Main features
- Implement this feature by lua script
- Shared locks are implemented when concurrent requests occur
How to use
$redisConfig = [ 'scheme' => 'tcp', 'host' => 'redis', 'port' => 6379, 'database' => 5, ]; $frequencyLimiter = new FrequencyLimiter($redisConfig); $result = $frequencyLimiter->setRules([ ['interval' => 10, 'limit' => 5, 'name' => 'clock0:userId:752'], ['interval' => 35, 'limit' => 15, 'name' => 'clock1:userId:752'], ['interval' => 80, 'limit' => 30, 'name' => 'clock2:userId:752'], ]); if (!$frequencyLimiter->check()) { die($frequencyLimiter->getCurrentRuleIndex()); }
$frequencyLimiter = new FrequencyLimiter($redisConfig); $result = $frequencyLimiter->setRules([ ['interval' => 10, 'limit' => 5, 'name' => $userName.':userId:752'], ]); if (!$frequencyLimiter->check()) { die('Maximum number of errors reached'); } if($userName === 'accountName' && $password==='abc'){ $frequencyLimiter->reset(); } echo "Login successful"
Rules configuration
key | type | desc |
---|---|---|
interval | int | Interval time in seconds |
limit | int | Token quantity |
name | string | Name of bucket |