janfish / frequency-limiter
基于令牌桶算法的频率限制器
dev-master
2021-04-23 05:05 UTC
Requires
- php: >=5.4
- predis/predis: ^1.1
This package is not auto-updated.
Last update: 2024-09-20 00:41:17 UTC
README
基于令牌桶算法的频率限制器
主要功能
- 通过 lua 脚本实现此功能
- 当发生并发请求时实现共享锁
如何使用
$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"