Heim Datenbank Redis Über Redis Atomic Counter Incr, um gleichzeitige Anfragen zu verhindern

Über Redis Atomic Counter Incr, um gleichzeitige Anfragen zu verhindern

Sep 28, 2020 pm 03:13 PM
redis

Die Kolumne „Redis-Tutorial“ stellt Ihnen die Redis-Atomzähler-Incr vor, um gleichzeitige Anfragen zu verhindern. Ich hoffe, dass sie Freunden in Not hilfreich sein wird.

Über Redis Atomic Counter Incr, um gleichzeitige Anfragen zu verhindern

1. Einführung

Bei einigen Systemen oder Funktionen, die Einschränkungen für viele gleichzeitige Anfragen haben, wie z. B. Flash-Sale-Aktivitäten, oder bei einigen Websites, die zu viele aktuelle Benutzer zurückgeben, warten Sie bitte. Versuchen Sie es später. Diese begrenzen die Anzahl gleichzeitiger Anfragen und dienen im Allgemeinen dazu, das Hintergrundsystem zu schützen und zu verhindern, dass das System aufgrund übermäßiger Verkehrsbelastung abstürzt. Angesichts der Folgen eines Systemabsturzes ist es für die Betreuer offensichtlich akzeptabler, einige Anfragen abzulehnen. Neben verschiedenen aktuellen Einschränkungen ist die Verwendung von Redis zur Implementierung neben dem vom System selbst entwickelten Zähler mit Sperrmechanismus offensichtlich eine effiziente, sichere, bequeme und bequeme Möglichkeit.

2. Incr-Befehl

Der Redis Incr-Befehl erhöht den im Schlüssel gespeicherten numerischen Wert um eins. Wenn der Schlüssel nicht vorhanden ist, wird der Wert des Schlüssels zuerst auf 0 initialisiert und dann wird die INCR-Operation ausgeführt. Gibt einen Fehler zurück, wenn der Wert den falschen Typ enthält oder wenn ein Wert vom Typ „String“ nicht als Zahl dargestellt werden kann.

Der Wert dieser Operation ist auf die 64-Bit-Zahlendarstellung mit Vorzeichen beschränkt.

Beispiel:

127.0.0.1:6379> set num 10
OK
127.0.0.1:6379> incr num
(integer) 11
127.0.0.1:6379> get num    # 数字值在 Redis 中以字符串的形式保存
"11"
Nach dem Login kopieren

Hinweis: Da Redis keinen expliziten Typ zur Darstellung von Ganzzahldaten hat, handelt es sich bei dieser Operation um eine Zeichenfolgenoperation.

Beim Ausführen dieser Operation wird die gespeicherte Zeichenfolge, die dem Schlüssel entspricht, in dezimale 64-Bit-Ganzzahldaten mit Vorzeichen analysiert.

Tatsächlich verwendet Redis intern die Ganzzahldarstellung, um entsprechende Ganzzahlwerte zu speichern, sodass Zeichenfolgenwerte dieses Typs tatsächlich in Ganzzahlen gespeichert werden und es kein Problem mit der Zeichenfolgendarstellung gespeicherter Ganzzahlen gibt. 3. Verwendungsszenarien
Dies ist beispielsweise ein Szenario: Wir haben eine Webanwendung und möchten aufzeichnen, wie oft jeder Benutzer diese Website täglich besucht.

Die Webanwendung muss lediglich die Benutzer-ID und die Zeichenfolge, die die aktuelle Uhrzeit darstellt, als Schlüssel verketten und den Befehl incr für diesen Schlüssel jedes Mal ausführen, wenn der Benutzer diese Seite besucht.


Dieses Szenario kann auf viele Arten erweitert werden:

Durch die Kombination der Befehle INCR und EXPIRE kann ein Zähler implementiert werden, der nur die Anzahl der Benutzerbesuche innerhalb eines angegebenen Intervalls aufzeichnet.

Der Client kann den aktuellen Zählerwert über den Befehl GETSET erhalten und setzen Sie es auf 0 zurück Durch atomare Inkrementierungs-/Dekrementierungsbefehle wie DECR oder INCRBY können bestimmte Werte entsprechend den Vorgängen des Benutzers erhöht oder verringert werden. In Online-Spielen muss beispielsweise der Spielstand des Benutzers gesteuert werden Echtzeit. Die Punktzahl kann steigen oder fallen.

2. Geschwindigkeitsbegrenzer

Ein Geschwindigkeitsbegrenzer ist ein spezielles Szenario, das die Ausführungsgeschwindigkeit bestimmter Vorgänge begrenzen kann.

Ein traditionelles Beispiel ist die Begrenzung der Anzahl der Anfragen für eine bestimmte öffentliche API.
Angenommen, wir möchten das folgende Problem lösen: Begrenzen Sie die Anzahl der Anfragen pro IP einer API auf nicht mehr als 10 Mal pro Sekunde.
Mit dem Befehl incr können wir dieses Problem auf zwei Arten lösen.


4. Java-Implementierung der Flusskontrolle

Hier verwenden wir die Redis-Incr-Funktion in Java, um einen Steuercode zu erstellen, der nur 100 Anfragen in 1 Minute zulässt. Der Schlüssel stellt die im Redis-Schlüsselwert gespeicherten kontrollierten Daten dar.

public static boolean flowControl(String key){
        //最大允许100
        int max = 100;
        long total = 1L;
        try {
            if (jedisInstance.get(key) == null) {
                //jedisInstance是Jedis连接实例,可以使单链接也可以使用链接池获取,实现方式请参考之前的blog内容
                //如果redis目前没有这个key,创建并赋予0,有效时间为60s
                jedisInstance.setex(key, 60, "0");
            } else {
                //获取加1后的值
                total = jedisInstance.incr(redisKey).longValue();
                //Redis TTL命令以秒为单位返回key的剩余过期时间。当key不存在时,返回-2。当key存在但没有设置剩余生存时间时,返回-1。否则,以秒为单位,返回key的剩余生存时间。
                if (jedisInstance.ttl(redisKey).longValue() == -1L)
                {
                    //为给定key设置生存时间,当key过期时(生存时间为0),它会被自动删除。
                    jedisInstance.expire(redisKey, 60);
                }
            }
        } catch (Exception e) {
            logger.error("流量控制组件:执行计数操作失败,无法执行计数");
        }
        long keytotaltransations = max;
        //判断是否已超过最大值,超过则返回false
        if (total > keytotaltransations) {
            return false;
        }
        return true;
    }
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonÜber Redis Atomic Counter Incr, um gleichzeitige Anfragen zu verhindern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So erstellen Sie den Redis -Clustermodus So erstellen Sie den Redis -Clustermodus Apr 10, 2025 pm 10:15 PM

Der Redis -Cluster -Modus bietet Redis -Instanzen durch Sharding, die Skalierbarkeit und Verfügbarkeit verbessert. Die Bauschritte sind wie folgt: Erstellen Sie ungerade Redis -Instanzen mit verschiedenen Ports; Erstellen Sie 3 Sentinel -Instanzen, Monitor -Redis -Instanzen und Failover; Konfigurieren von Sentinel -Konfigurationsdateien, Informationen zur Überwachung von Redis -Instanzinformationen und Failover -Einstellungen hinzufügen. Konfigurieren von Redis -Instanzkonfigurationsdateien, aktivieren Sie den Cluster -Modus und geben Sie den Cluster -Informationsdateipfad an. Erstellen Sie die Datei nodes.conf, die Informationen zu jeder Redis -Instanz enthält. Starten Sie den Cluster, führen Sie den Befehl erstellen aus, um einen Cluster zu erstellen und die Anzahl der Replikate anzugeben. Melden Sie sich im Cluster an, um den Befehl cluster info auszuführen, um den Clusterstatus zu überprüfen. machen

So verwenden Sie den Befehl Redis So verwenden Sie den Befehl Redis Apr 10, 2025 pm 08:45 PM

Die Verwendung der REDIS -Anweisung erfordert die folgenden Schritte: Öffnen Sie den Redis -Client. Geben Sie den Befehl ein (Verbschlüsselwert). Bietet die erforderlichen Parameter (variiert von der Anweisung bis zur Anweisung). Drücken Sie die Eingabetaste, um den Befehl auszuführen. Redis gibt eine Antwort zurück, die das Ergebnis der Operation anzeigt (normalerweise in Ordnung oder -err).

So lesen Sie den Quellcode von Redis So lesen Sie den Quellcode von Redis Apr 10, 2025 pm 08:27 PM

Der beste Weg, um Redis -Quellcode zu verstehen, besteht darin, Schritt für Schritt zu gehen: Machen Sie sich mit den Grundlagen von Redis vertraut. Wählen Sie ein bestimmtes Modul oder eine bestimmte Funktion als Ausgangspunkt. Beginnen Sie mit dem Einstiegspunkt des Moduls oder der Funktion und sehen Sie sich die Codezeile nach Zeile an. Zeigen Sie den Code über die Funktionsaufrufkette an. Kennen Sie die von Redis verwendeten Datenstrukturen. Identifizieren Sie den von Redis verwendeten Algorithmus.

So verwenden Sie ein einzelnes Gewinde -Redis So verwenden Sie ein einzelnes Gewinde -Redis Apr 10, 2025 pm 07:12 PM

Redis verwendet eine einzelne Gewindearchitektur, um hohe Leistung, Einfachheit und Konsistenz zu bieten. Es wird E/A-Multiplexing, Ereignisschleifen, nicht blockierende E/A und gemeinsame Speicher verwendet, um die Parallelität zu verbessern, jedoch mit Einschränkungen von Gleichzeitbeschränkungen, einem einzelnen Ausfallpunkt und ungeeigneter Schreib-intensiver Workloads.

So löschen Sie Redis -Daten So löschen Sie Redis -Daten Apr 10, 2025 pm 10:06 PM

So löschen Sie Redis -Daten: Verwenden Sie den Befehl Flushall, um alle Schlüsselwerte zu löschen. Verwenden Sie den Befehl flushdb, um den Schlüsselwert der aktuell ausgewählten Datenbank zu löschen. Verwenden Sie SELECT, um Datenbanken zu wechseln, und löschen Sie dann FlushDB, um mehrere Datenbanken zu löschen. Verwenden Sie den Befehl del, um einen bestimmten Schlüssel zu löschen. Verwenden Sie das Redis-Cli-Tool, um die Daten zu löschen.

So lesen Sie Redis -Warteschlange So lesen Sie Redis -Warteschlange Apr 10, 2025 pm 10:12 PM

Um eine Warteschlange aus Redis zu lesen, müssen Sie den Warteschlangenname erhalten, die Elemente mit dem Befehl LPOP lesen und die leere Warteschlange verarbeiten. Die spezifischen Schritte sind wie folgt: Holen Sie sich den Warteschlangenname: Nennen Sie ihn mit dem Präfix von "Warteschlange:" wie "Warteschlangen: My-Queue". Verwenden Sie den Befehl LPOP: Wischen Sie das Element aus dem Kopf der Warteschlange aus und geben Sie seinen Wert zurück, z. B. die LPOP-Warteschlange: my-queue. Verarbeitung leerer Warteschlangen: Wenn die Warteschlange leer ist, gibt LPOP NIL zurück, und Sie können überprüfen, ob die Warteschlange existiert, bevor Sie das Element lesen.

So sehen Sie alle Schlüssel in Redis So sehen Sie alle Schlüssel in Redis Apr 10, 2025 pm 07:15 PM

Um alle Schlüssel in Redis anzuzeigen, gibt es drei Möglichkeiten: Verwenden Sie den Befehl keys, um alle Schlüssel zurückzugeben, die dem angegebenen Muster übereinstimmen. Verwenden Sie den Befehl scan, um über die Schlüssel zu iterieren und eine Reihe von Schlüssel zurückzugeben. Verwenden Sie den Befehl Info, um die Gesamtzahl der Schlüssel zu erhalten.

So implementieren Sie die zugrunde liegenden Redis So implementieren Sie die zugrunde liegenden Redis Apr 10, 2025 pm 07:21 PM

Redis verwendet Hash -Tabellen, um Daten zu speichern und unterstützt Datenstrukturen wie Zeichenfolgen, Listen, Hash -Tabellen, Sammlungen und geordnete Sammlungen. Ernähren sich weiterhin über Daten über Snapshots (RDB) und appendiert Mechanismen nur Schreibmechanismen. Redis verwendet die Master-Slave-Replikation, um die Datenverfügbarkeit zu verbessern. Redis verwendet eine Ereignisschleife mit einer Thread, um Verbindungen und Befehle zu verarbeiten, um die Datenatomizität und Konsistenz zu gewährleisten. Redis legt die Ablaufzeit für den Schlüssel fest und verwendet den faulen Löschmechanismus, um den Ablaufschlüssel zu löschen.

See all articles