Inhaltsverzeichnis
Mehrere Befehle für die Liste
Verwenden Sie den Befehl, um die Warteschlange zu demonstrieren.
Die Implementierungsidee der Verzögerungswarteschlange
Einige professionelle Warteschlangen-Middleware ist komplizierter anzuwenden und erhöht die Betriebs- und Wartungskosten, wie z. B. RabbitMQ. Bevor Sie eine Nachricht senden, müssen Sie einen Exchange-Switch erstellen Warteschlange und dann Exchange und Queue Zum Binden müssen Sie beim Senden einer Nachricht den Routing-Schlüssel angeben, der mit Exchange übereinstimmt und schließlich die Warteschlange erreicht. Wenn das Szenario einfach ist, können Sie Redis verwenden, um eine Warteschlange zu implementieren, dies sollte jedoch der Fall sein Beachten Sie, dass Redis nicht über die Eigenschaften einer professionellen Warteschlange verfügt. Dies bedeutet, dass die Nachricht unzuverlässig ist, wenn sie 100 % zuverlässig ist Professionelle Warteschlangen-Middleware und andere Mechanismen wie Ack als Garantie.
Heim Datenbank Redis Eine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in Redis

Eine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in Redis

Dec 10, 2021 am 10:02 AM
redis 消息队列

Wie implementiert Redis die Nachrichtenwarteschlange und die verzögerte Nachrichtenwarteschlange? Der folgende Artikel stellt Ihnen die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in Redis vor. Ich hoffe, er wird Ihnen hilfreich sein!

Eine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in Redis

Wenn es um Redis geht, denken vielleicht mehr Leute an die Verwendung als Cache. Tatsächlich kann Redis auch einige einfache Nachrichtenwarteschlangenzwecke implementieren. Wir können die Listendatenstruktur verwenden, um die Warteschlange zu implementieren. [Verwandte Empfehlungen: Redis-Video-Tutorial]

Mehrere Befehle für die Liste

lpush (Linksdruck)

wird von der linken Seite der Warteschlange gespeichert

rpush (Rechtsdruck)

wird von der rechten Seite gespeichert Seite der Warteschlange

lpop (linker Pop)

Von der linken Seite der Warteschlange herausziehen

rpop (rechter Pop)

Von der rechten Seite der Warteschlange herausziehen

Die oben genannten vier Befehle können eine Liste erstellen Helfen Sie uns bei der Implementierung von Warteschlangen oder Stapeln und den Merkmalen von Warteschlangen. Es gilt: „First in, first out“ und die Eigenschaft des Stapels ist „First in, last out“,

Die Warteschlangenimplementierung kann also lpush + rpop oder rpush + lpop verwenden,

Die Stack-Implementierung ist lpush + lpop oder rpush + rpop.

Eine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in Redis

Verwenden Sie den Befehl, um die Warteschlange zu demonstrieren.

Der Produzent veröffentlicht Nachrichten Als Produzent veröffentlichen Sie Nachrichten. Der Verbraucher konsumiert Nachrichten. Da der Produzent rpush verwendet, muss der Verbraucher lpop verwenden in der Reihenfolge von 1 bis 5 auslesen und in der Reihenfolge vorlesen. Am Ende befinden sich keine Nachrichten in der Warteschlange und das Popup ist immer leer

Leeres Abfrageproblem

Eine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in RedisVerwenden Sie lpop, um oben zu konsumieren Wenn Sie eine Nachricht öffnen, können Sie sehen, dass wir jedes Mal, wenn wir zum Pop gehen, eine leere Nachricht lesen, wenn es sich um einen manuellen Ausführungsbefehl handelt. Wenn es sich jedoch um ein Programm mit geschriebenem Code handelt, ist dies der Fall Wird weiterhin Pop-Daten (Abrufen von Daten) ausführen, führt dies zu leeren Abfragen (nutzloses Lesen), was nicht nur den CPU-Verbrauch des Clients erhöht, sondern auch die QPS von Redis erhöht und immer noch ein nutzloser Vorgang ist Infolgedessen reagiert der Zugriff anderer Clients auf Redis nur langsam. Lösung A (Ruhezustand)

Diese Lösung weist auch Mängel auf, d. h. die Verzögerung beim Nachrichtenverbrauch nimmt zu. Wenn nur ein Verbraucher vorhanden ist, beträgt die Verzögerung 1 Sekunde, d Es gibt Neuigkeiten und es muss immer noch bis zum Aufwachen 1 Sekunde warten, bevor es konsumiert wird.

Wenn es mehrere Verbraucher gibt, verringert sich die Latenz, da die Schlafzeit jedes Verbrauchers aufgeteilt ist. Gibt es jedoch einen besseren Weg, dies zu erreichen? fast 0 Latenz? Lösung B (Blockieren des Lesens) Wenn sich keine Daten in der Warteschlange befinden, wird sie sofort beantwortet und liest die Daten. Daher kann die Verwendung von blpop/brpop als Ersatz für lpop/rpop das Problem der Nachrichtenverzögerung lösen um 3 Attribute zur Warteschlange hinzuzufügen, 6, 7, 8

Eine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in Redis

Verwenden Sie blpop, um die Warteschlange zu lesen. Wenn nach dieser Zeit keine Nachricht vorliegt, wird Null zurückgegeben. Zu diesem Zeitpunkt können Sie den BLPOP-Vorgang weiterhin wiederholen

Das Problem der automatischen Trennung inaktiver Verbindungen zum Blockieren von Lesevorgängen

Wenn der Client blockierende Lesevorgänge verwendet, wird der Dienst blockiert behandelt sie im Allgemeinen als eine inaktive Verbindung und trennt sie daher aktiv, um unnötige Verbindungen zu reduzieren, die Ressourcen belegen. Zu diesem Zeitpunkt löst der Client eine Ausnahme aus. Beachten Sie daher, dass Ausnahmen erfasst werden müssen, wenn der Client das blockierende Lesen verwendet Behandeln Sie sie entsprechend, z. B. Versuchen Sie es erneut.

Java-Client implementiert Nachrichtenwarteschlange

Thread.sleep(1000)

Die Idee ist die gleiche wie oben, außer dass der Befehlszeilen-Client redis-cli in die Java-Sprache geändert wird und ein Thread oder mehrere Threads die RPush-Veröffentlichung durchführen,

Ein weiterer oder mehrere Threads führen den Blpop-Verbrauch durch. Der fertige Code befindet sich unter: https://github.com/qiaomengnan16/redis-demo/tree/main/redis-queue

Publisher

Eine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in Redis

Abonnieren

Eine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in Redis

Die Implementierungsidee der Verzögerungswarteschlange

Die Verzögerungswarteschlange bedeutet, dass die Nachricht nach einer gewissen Zeit vom Verbraucher verbraucht wird und der Verbraucher sie nicht sofort lesen kann, nachdem die Nachricht gesendet wurde Erhalten it,

zset kann uns dabei helfen. Erstens kann zset einen Zeitstempel speichern, sodass wir jedes Mal, wenn wir eine Nachricht veröffentlichen, den aktuellen Zeitstempel plus den verzögerten Zeitstempel verwenden Der Verbraucher ruft die Nachricht ab, fängt die Daten von zset ab und erhält die Nachricht, die der aktuellen Zeit entspricht (d. h. es werden Daten mit einer Punktzahl kleiner oder gleich dem aktuellen Zeitstempel erhalten). Die Punktzahl ist kleiner oder gleich dem aktuellen Zeitstempel dass die Meldung die Zeit erreicht hat. Wenn sie größer ist, bedeutet dies, dass Sie eine Weile warten müssen, bevor Sie sie verwenden.

Tastenbefehle zadd (Herausgeber), zrangebyscore (Abonnent), zrem (Abonnent löscht nach Datenverbrauch)

BefehlsimplementierungWir haben zadd verwendet, um 4 Datenelemente hinzuzufügen, nämlich 1 und 2, Daten, die das können nach 3 Sekunden konsumiert werden (Pseudosprache, das ist eigentlich nur eine Punktzahl), und Kafka, das nach 10 Sekunden konsumiert werden kann,

Eine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in RedisWenn es die dritte Sekunde erreicht hat, nehmen wir den Wert in zset, der größer ist kleiner oder gleich 1 Die Summe der Sekunden ist kleiner oder gleich 3 Sekunden an Daten, da die Daten in diesem Bereich genau das sind, was wir konsumieren können. Wie Sie sehen, haben wir 3 Datenelemente herausgenommen, die die Bedingungen erfüllen ,

Eine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in RedisWenn wir jeweils nur ein Datenelement verbrauchen können, können Sie eine Begrenzungsbeschränkungsbedingung hinzufügen. Sie können das Bild unten sehen, um die ersten Daten herauszunehmen, die verbraucht werden können, redis

Eine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in Redis Beachten Sie gleichzeitig, dass es sich von den Listendaten lpop/ und blpop unterscheidet (sie löschen automatisch die Daten in der ursprünglichen Warteschlange, wenn sie angezeigt werden).

Obwohl die Daten abgerufen wurden, wenn zrem nicht verwendet wird Um es zu löschen, werden diese Daten weiterhin von anderen gelesen, da sie noch in zset vorhanden sind.

Zrem wurde jedoch möglicherweise von anderen vorbelegt. Im Falle des Löschens (Verbrauchs) muss der Code auch beurteilen, ob die Rückgabe erfolgt Wenn der Wert von zrem größer als 0 ist, können wir feststellen, ob wir diese Nachricht erfolgreich vorweggenommen haben und sie nach dem Erfolg korrekt verarbeiten.

Code-Implementierung

Verleger

1Eine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in Redis

Abonnenten

1Eine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in Redis

Testen Sie den Verzögerungseffekt

1Eine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in RedisVollständige Codeadresse: https://github.com/ qiaomengnan16 /redis-demo/tree/main/redis-delayed-queue

Optimierung, implementiert mit LuaEs gibt ein Problem in der oben implementierten Verzögerungswarteschlange, d Wenn Sie so weiterlesen, ist es sehr wahrscheinlich, dass Sie sie mehrere Runden lang nicht abrufen können und die Ressourcen verschwendet werden. Daher können Sie sie mithilfe von Lua-Skripten optimieren Lassen Sie zrangebyscore und zrem zu einer atomaren Operation werden, was bedeutet, dass Multi-Thread-Konflikte vermieden und Ressourcen verschwendet werden können, die nicht abgerufen werden können.

Eine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in Redis

FazitEine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in Redis

Einige professionelle Warteschlangen-Middleware ist komplizierter anzuwenden und erhöht die Betriebs- und Wartungskosten, wie z. B. RabbitMQ. Bevor Sie eine Nachricht senden, müssen Sie einen Exchange-Switch erstellen Warteschlange und dann Exchange und Queue Zum Binden müssen Sie beim Senden einer Nachricht den Routing-Schlüssel angeben, der mit Exchange übereinstimmt und schließlich die Warteschlange erreicht. Wenn das Szenario einfach ist, können Sie Redis verwenden, um eine Warteschlange zu implementieren, dies sollte jedoch der Fall sein Beachten Sie, dass Redis nicht über die Eigenschaften einer professionellen Warteschlange verfügt. Dies bedeutet, dass die Nachricht unzuverlässig ist, wenn sie 100 % zuverlässig ist Professionelle Warteschlangen-Middleware und andere Mechanismen wie Ack als Garantie.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter:

Einführung in die Programmierung

! !

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über die Implementierungsmethoden der Nachrichtenwarteschlange und der verzögerten Nachrichtenwarteschlange in Redis. 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)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen 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 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.

Was tun, wenn Redis-Server nicht gefunden werden kann Was tun, wenn Redis-Server nicht gefunden werden kann Apr 10, 2025 pm 06:54 PM

Schritte zur Lösung des Problems, das Redis-Server nicht finden kann: Überprüfen Sie die Installation, um sicherzustellen, dass Redis korrekt installiert ist. Setzen Sie die Umgebungsvariablen Redis_host und Redis_port; Starten Sie den Redis-Server Redis-Server; Überprüfen Sie, ob der Server Redis-Cli Ping ausführt.

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 sehen Sie die Versionsnummer der Redis So sehen Sie die Versionsnummer der Redis Apr 10, 2025 pm 05:57 PM

Um die Redis -Versionsnummer anzuzeigen, können Sie die folgenden drei Methoden verwenden: (1) Geben Sie den Info -Befehl ein, (2) Starten Sie den Server mit der Option --version und (3) die Konfigurationsdatei anzeigen.

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 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 verwenden Sie Redis Zset So verwenden Sie Redis Zset Apr 10, 2025 pm 07:27 PM

Redis bestellte Sets (ZSETs) werden verwendet, um bestellte Elemente und Sortieren nach zugehörigen Bewertungen zu speichern. Die Schritte zur Verwendung von ZSET umfassen: 1. Erstellen Sie ein Zset; 2. Fügen Sie ein Mitglied hinzu; 3.. Holen Sie sich eine Mitgliederbewertung; 4. Holen Sie sich eine Rangliste; 5. Holen Sie sich ein Mitglied in der Rangliste; 6. Ein Mitglied löschen; 7. Holen Sie sich die Anzahl der Elemente; 8. Holen Sie sich die Anzahl der Mitglieder im Score -Bereich.

See all articles