Heim  >  Artikel  >  Backend-Entwicklung  >  PHP verwendet den Token-Bucket-Algorithmus, um eine Flusskontrolle basierend auf Redis zu implementieren

PHP verwendet den Token-Bucket-Algorithmus, um eine Flusskontrolle basierend auf Redis zu implementieren

jacklove
jackloveOriginal
2018-06-15 17:22:533749Durchsuche

Dieser Artikel stellt PHP basierend auf Redis vor und verwendet den Token-Bucket-Algorithmus zur Steuerung des Zugriffsverkehrs. Er bietet eine vollständige Algorithmusbeschreibung und Demonstrationsbeispiele, die jeder lernen und verwenden kann.
Immer wenn es lange inländische Feiertage oder wichtige Festivals gibt, sind inländische Aussichtspunkte oder U-Bahnen überfüllt, was zu einer übermäßigen Belastung führt. Einige werden Maßnahmen zur Begrenzung des Personenstroms ergreifen Wenn der Bereich auf einen bestimmten Wert reduziert wird, wird keine weitere Berechtigung mehr gewährt.

Zum Beispiel:
Die maximal zulässige Personenzahl in der Gegend beträgt M
Die aktuelle Personenzahl in der Gegend beträgt N
Jedes Mal, wenn Sie eintreten. Eine Person, N+1, wenn N = M, darf nicht eintreten
Jede Person geht, N-1, wenn N 9586eec735299acfe93c025b011a985f 'localhost',    'port' => 6379,    'index' => 0,    'auth' => '',    'timeout' => 1,    'reserved' => NULL,    'retry_interval' => 100, );// 令牌桶容器$queue = 'mycontainer';// 最大令牌数$max = 10;// 每次时间间隔加入的令牌数$token_num = 3;// 时间间隔,最好是能被60整除的数,保证覆盖每一分钟内所有的时间$time_step = 1;// 执行次数$exec_num = (int)(60/$time_step);// 创建TrafficShaper对象$oTrafficShaper = new TrafficShaper($config, $queue, $max);for($i=0; $iac5d8bbec8fb1aae84ade36d7c132775add($token_num);    echo '['.date('Y-m-d H:i:s').'] add token num:'.$add_num.PHP_EOL;     sleep($time_step); }?>
Ausführungssimulationsverbrauch

b0aa8dbae4af6175c5b1872dc35aed72 'localhost',    'port' => 6379,    'index' => 0,    'auth' => '',    'timeout' => 1,    'reserved' => NULL,    'retry_interval' => 100,
);// 令牌桶容器$queue = 'mycontainer';// 最大令牌数$max = 10;// 每次时间间隔随机消耗的令牌数量范围$consume_token_range = array(2, 8);// 时间间隔$time_step = 1;// 创建TrafficShaper对象$oTrafficShaper = new TrafficShaper($config, $queue, $max);// 重设令牌桶,填满令牌$oTrafficShaper->reset();// 执行令牌消耗while(true){    $consume_num = mt_rand($consume_token_range[0], $consume_token_range[1]);    for($i=0; $idd4e44fbcd7068196de2d6c8cad7e133get();        echo '['.date('Y-m-d H:i:s').'] consume token:'.($status? 'true' : 'false').PHP_EOL;
    }
    sleep($time_step);
}?>
Ausführung Ergebnisse:
* * * * * php /程序的路径/cron_add.php >> /tmp/cron_add.log

Da der Token-Bucket zu Beginn voll ist (maximale Anzahl an Tokens beträgt 10), können in den ersten 10 Malen mehr Tokens abgerufen werden als beim Beitritt Bei Überschreitung der Anzahl der Karten wird der Zugriff eingeschränkt.

In diesem Artikel wird erläutert, wie PHP den Token-Bucket-Algorithmus verwendet, um eine Flusskontrolle basierend auf Redis zu implementieren. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:


Redis Master-Slave-Synchronisierung , Verwandte Vorgänge der Lese-Schreib-Trennungseinstellungen

Stellt die Methode von MySQL zum Neuerstellen einer Tabelle vor Partitionieren und Daten behalten


PHP generiert relevante Inhalte für die eindeutige RequestID-Klasse

Das obige ist der detaillierte Inhalt vonPHP verwendet den Token-Bucket-Algorithmus, um eine Flusskontrolle basierend auf Redis zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn