Heim >Backend-Entwicklung >PHP-Tutorial >Verwendung von Redis zur Implementierung der Strombegrenzungsstrategie in PHP
Mit der Entwicklung des Internets steigt die Anzahl der Anfragen für viele Websites oder Anwendungen von Tag zu Tag, was große Herausforderungen an die serverseitige Ressourcenverwaltung mit sich bringt. In diesem Fall wird die aktuelle Begrenzungsstrategie zu einer wichtigen Lösung. In diesem Artikel wird erläutert, wie Sie mit Redis aktuelle Begrenzungsstrategien in PHP-Anwendungen implementieren können.
1. Einführung in Redis
Redis ist eine moderne Open-Source-Datenbank, die Speicher zum Speichern von Daten verwendet und so das Lesen und Schreiben sehr schnell macht. Redis unterstützt eine Vielzahl von Datentypen, darunter Strings, Hashes, Listen, Mengen und geordnete Mengen. Darüber hinaus bietet Redis auch erweiterte Funktionen wie Veröffentlichung und Abonnement, Transaktionen usw.
2. Einführung in die aktuelle Begrenzungsstrategie
Die aktuelle Begrenzungsstrategie bezieht sich auf die Begrenzung der Anforderungshäufigkeit einer Anwendung oder Website, um serverseitige Ressourcen zu schützen und eine Überbeanspruchung zu verhindern. Beispielsweise können Website- und Anwendungsadministratoren bei einigen API-Diensten, die eine Zahlung erfordern, Anfragen von unbezahlten Benutzern einschränken, um Ressourcenmissbrauch und Umsatzrückgänge zu verhindern. Ein weiteres Beispiel: Für einige Vorgänge, die eine Anmeldeüberprüfung erfordern, kann der Administrator illegale Anfragen einschränken, um Brute-Force-Angriffe zu verhindern.
3. So verwenden Sie Redis zur Implementierung der aktuellen Begrenzungsstrategie
Redis bietet einen Algorithmus namens „Token Bucket“ zur Umsetzung der aktuellen Begrenzungsstrategie. Bei diesem Algorithmus werden Anfragen als Token behandelt und der Server speichert diese Token in einem Bucket (als Redis-Datenstruktur ZSET bezeichnet). Jeder Token trägt einen Zeitstempel, der angibt, wann der Token generiert wurde. Wenn eine Anfrage eintrifft, wird versucht, ein Token zu erhalten, und wenn der Erwerb erfolgreich ist, kann die Ausführung nach unten fortgesetzt werden. Wenn die Erfassung fehlschlägt, gilt die Anforderung als Drosselung.
Im Folgenden erfahren Sie, wie Sie den Token-Bucket-Algorithmus mithilfe von Redis in einer PHP-Anwendung implementieren:
1 Erstellen Sie ein Redis-Client-Objekt:
/ /Redis-Client erstellen
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
2 Bucket festlegen Das Maximum Kapazität:
// Legen Sie die maximale Kapazität des Token-Buckets fest
$bucket_capacity = 1000;
3. Legen Sie die Token-Generierungsrate fest: #🎜🎜 ## 🎜🎜#//Token-Generierungsrate festlegen
$token_rate = 100.0;
4. Token hinzufügen:
// Token hinzufügen#🎜 🎜#function add_token( $redis, $token_rate, $bucket_capacity) {
$current_time = microtime(true); $tokens = $redis->zrevrangebyscore('tokens', '+inf', $current_time); $tokens_count = count($tokens); // 计算当前桶内的令牌数 $current_capacity = $bucket_capacity - $tokens_count; // 计算新令牌的数量 $new_tokens_count = ($token_rate / $bucket_capacity) * $current_capacity; $new_tokens_count = min($new_tokens_count, $bucket_capacity - $tokens_count); // 添加新令牌 if ($new_tokens_count > 0) { $multi_exec = $redis->multi(); for ($i = 0; $i < $new_tokens_count; $i++) { $multi_exec->zadd('tokens', $current_time + ($i / $token_rate), $current_time + ($i / $token_rate)); } $multi_exec->exec(); }
}
Funktion check_token($redis, $bucket_capacity) {
$current_time = microtime(true); $tokens = $redis->zrevrangebyscore('tokens', '+inf', $current_time); $tokens_count = count($tokens); // 计算当前桶内的令牌数 $current_capacity = $bucket_capacity - $tokens_count; // 如果桶是满的,则限流 if ($current_capacity <= 0) { return false; } // 如果桶是空的,则添加新令牌 if ($tokens_count == 0) { add_token($redis, $token_rate, $bucket_capacity); } // 获取第一个令牌 $token_time = reset($tokens); // 如果获取令牌的时间早于当前时间,则限流 if ($token_time < $current_time) { return false; } // 删除此令牌 $redis->zremrangebyscore('tokens', '-inf', $token_time); return true;
}
Das obige ist der detaillierte Inhalt vonVerwendung von Redis zur Implementierung der Strombegrenzungsstrategie in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!