Heim >Backend-Entwicklung >PHP-Tutorial >Verwendung von Redis zur Implementierung von RateLimiter in PHP

Verwendung von Redis zur Implementierung von RateLimiter in PHP

王林
王林Original
2023-05-19 21:01:341432Durchsuche

RateLimiter ist eine der Grundkomponenten der Verkehrskontrolle, mit der die Zugriffshäufigkeit gesteuert, Server vor böswilligen Angriffen geschützt und Überlastungen verhindert werden.

In PHP können wir Redis als Datenspeicher verwenden, um einen einfachen und effizienten RateLimiter zu implementieren. In diesem Artikel wird erläutert, wie Sie RateLimiter mit Redis implementieren.

  1. Installieren Sie die Redis-Erweiterung

Zuerst müssen wir die Redis-Erweiterung installieren. In einem Linux-System können Sie zur Installation den folgenden Befehl verwenden:

sudo apt-get install php-redis

Wenn Sie ein Windows-System verwenden, können Sie die Erweiterung von PECL beziehen und sie manuell kompilieren und installieren.

  1. Redis-Verbindung initialisieren

In PHP muss die Verwendung von Redis über die von der PHPredis-Erweiterung bereitgestellten Klassen erfolgen. Wir müssen ein Redis-Verbindungsobjekt initialisieren.

$redis = new Redis(); // 创建一个 Redis 对象
$redis->connect('127.0.0.1', 6379); // 连接到 Redis

Hier gehen wir davon aus, dass Redis lokal läuft und den Standardport 6379 verwendet. Wenn Redis auf einem anderen Server oder Port läuft, müssen die entsprechenden Parameter geändert werden.

  1. RateLimiter implementieren

Im Folgenden implementieren wir einen einfachen RateLimiter, der jede IP-Adresse auf maximal 100 Besuche pro Stunde begrenzt.

// 获取客户端IP地址
$clientIp = $_SERVER['REMOTE_ADDR'];
// Redis key,将客户端IP地址与当前小时数拼接在一起,作为唯一的key
$redisKey = $clientIp . '_' . date('Y-m-d-H');

// 从Redis中获取当前IP地址在当前小时数内已经访问的次数
$count = $redis->get($redisKey);
if ($count === false) { // 如果之前没有访问记录,则设置为0
    $redis->set($redisKey, 0);
    $redis->expire($redisKey, 3600); // 设置过期时间为1小时
}

if ($count >= 100) { // 如果当前IP地址在当前小时数内已经访问超过100次,则返回错误
    header('HTTP/1.1 429 Too Many Requests');
    exit;
}

$redis->incr($redisKey); // 访问次数加1

Im Code verwenden wir die Methoden „get“, „set“, „expire“ und „incr“ von Redis. Mit „get“ wird ermittelt, wie oft innerhalb der aktuellen Stunde auf die aktuelle IP-Adresse zugegriffen wurde. Mit „Set“ wird die Anzahl der Zugriffe auf 0 initialisiert und die Ablaufzeit auf 1 Stunde festgelegt. Mit „Expire“ wird die Ablaufzeit auf festgelegt Verhindern Sie, dass IP-Missbrauch den Redis-Speicher belegt, und erhöhen Sie die Anzahl der Besuche, die zum Betreiben der aktuellen IP-Adresse verwendet werden, um 1.

  1. Zusammenfassung

Die Verwendung von Redis zur Implementierung von RateLimiter ist eine einfache und effiziente Möglichkeit, den Server effektiv vor böswilligen Angriffen zu schützen und eine Überlastung zu verhindern. Die von der phpredis-Erweiterung bereitgestellten Klassen machen die Verwendung von Redis in PHP äußerst einfach. Wir müssen lediglich die Verbindung konfigurieren.

Natürlich sind die Beispiele hier nur einfache Demonstrationen und berücksichtigen keine besonderen Situationen, aber Sie können den Code nach Bedarf ändern, um ihn an Ihre Bedürfnisse anzupassen.

Das obige ist der detaillierte Inhalt vonVerwendung von Redis zur Implementierung von RateLimiter in PHP. 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