janfish/frequency-limiter

基于令牌桶算法的频率限制器

dev-master 2021-04-23 05:05 UTC

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"

规则配置

参考