Redis Pub/Sub Messaging

RedisBeginner
Jetzt üben

Einführung

In diesem Lab erkundest du das Pub/Sub-Nachrichtensystem von Redis. Du lernst, wie du Kanäle abonnierst, Nachrichten veröffentlichst und Abonnements beendest. Dieses Lab führt dich durch die grundlegenden Operationen mit den Befehlen SUBSCRIBE, PUBLISH, UNSUBSCRIBE und PSUBSCRIBE.

Einen Kanal mit SUBSCRIBE abonnieren

In diesem Schritt lernst du, wie du mit dem Befehl SUBSCRIBE einen Kanal in Redis abonnierst. Das Abonnieren eines Kanals ermöglicht es dir, Nachrichten zu empfangen, die auf diesem Kanal veröffentlicht werden. Dies ist ein grundlegendes Konzept im Pub/Sub-Nachrichtensystem von Redis.

Terminal 1: Kanal abonnieren

Öffne dein erstes Terminal (wir nennen dies Terminal 1). Du kannst das in der LabEx-Umgebung bereitgestellte Xfce-Terminal verwenden.

Verbinde dich mit dem Redis-Server über den Befehl redis-cli:

redis-cli

Daraufhin sollte die Redis-Eingabeaufforderung erscheinen: 127.0.0.1:6379>.

Abonniere einen Kanal namens mychannel mit dem Befehl SUBSCRIBE:

SUBSCRIBE mychannel

Die Ausgabe sieht in etwa so aus:

Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "mychannel"
3) (integer) 1

Schlüsseln wir die Ausgabe auf:

  • "subscribe": Dies zeigt an, dass du einen Kanal erfolgreich abonniert hast.
  • "mychannel": Dies ist der Name des von dir abonnierten Kanals.
  • (integer) 1: Dies ist die Anzahl der Kanäle, die du derzeit abonniert hast.

Wichtig: Lass Terminal 1 geöffnet, während die redis-cli-Sitzung aktiv ist und den Kanal abonniert hat. Schließe dieses Terminal NICHT und drücke nicht Strg+C (Ctrl+C), da du dadurch das Abonnement des Kanals beenden würdest. Im nächsten Schritt verwenden wir ein zweites Terminal zum Veröffentlichen von Nachrichten.

Nachrichten mit PUBLISH veröffentlichen

In diesem Schritt lernst du, wie du mit dem Befehl PUBLISH Nachrichten auf einem Kanal in Redis veröffentlichst. Das Veröffentlichen von Nachrichten ist die Kernfunktionalität des Pub/Sub-Systems, mit der du Daten an alle Abonnenten eines bestimmten Kanals senden kannst.

Terminal 2: Nachrichten veröffentlichen

Öffne ein zweites Terminal (wir nennen dies Terminal 2). Du kannst einen neuen Tab in deinem Xfce-Terminal öffnen.

Verbinde dich mit dem Redis-Server über den Befehl redis-cli:

redis-cli

Daraufhin sollte die Redis-Eingabeaufforderung erscheinen: 127.0.0.1:6379>.

Veröffentliche nun eine Nachricht auf dem Kanal mychannel mit dem Befehl PUBLISH:

PUBLISH mychannel "Hello, Redis!"

Die Ausgabe in Terminal 2 gibt die Anzahl der Clients an, die die Nachricht empfangen haben:

(integer) 1

In diesem Fall lautet die Ausgabe (integer) 1, da du im vorherigen Schritt in Terminal 1 ein aktives Abonnement für mychannel eingerichtet hast.

Die Nachricht in Terminal 1 beobachten

Wechsle nun zurück zu Terminal 1 (wo du in Schritt 1 mychannel abonniert hast). Du solltest die soeben veröffentlichte Nachricht in Echtzeit angezeigt sehen:

1) "message"
2) "mychannel"
3) "Hello, Redis!"

Dies zeigt:

  • "message": Zeigt an, dass es sich um eine veröffentlichte Nachricht handelt.
  • "mychannel": Der Kanal, auf dem die Nachricht veröffentlicht wurde.
  • "Hello, Redis!": Der eigentliche Inhalt der Nachricht.

Echtzeit-Messaging testen

Du kannst nun mit Echtzeit-Messaging experimentieren:

  1. Gehe zurück zu Terminal 2 und veröffentliche weitere Nachrichten.
  2. Wechsle zu Terminal 1, um zu sehen, wie sie sofort erscheinen.
  3. Versuche, verschiedene Nachrichten zu veröffentlichen, um die Live-Kommunikation zu beobachten.

Beispiel – in Terminal 2:

PUBLISH mychannel "This is message 2"
PUBLISH mychannel "Real-time messaging works!"

Wichtig: Lass sowohl Terminal 1 als auch Terminal 2 mit ihren aktiven redis-cli-Sitzungen geöffnet. Wir werden beide Terminals in den nächsten Schritten weiter verwenden.

Abonnement mit UNSUBSCRIBE beenden

In diesem Schritt lernst du, wie du ein Kanalabonnement in Redis mit dem Befehl UNSUBSCRIBE beendest. Durch das Abbestellen wird ein Client aus der Liste der Abonnenten für einen bestimmten Kanal entfernt, wodurch verhindert wird, dass er weitere auf diesem Kanal veröffentlichte Nachrichten empfängt.

Terminal 1: Abonnement-Modus verlassen

Gehe zu Terminal 1 (wo du derzeit mychannel abonniert hast). Dort sollte der Abonnementstatus „Reading messages... (press Ctrl-C to quit)“ angezeigt werden.

Da sich Terminal 1 im Abonnement-Modus befindet, kannst du keine regulären Redis-Befehle direkt ausführen. Um das Abonnement zu beenden, musst du zuerst den Abonnement-Modus verlassen:

  1. Drücke Strg+C (Ctrl+C), um den Abonnement-Modus zu beenden.

  2. Du solltest sehen, dass die redis-cli-Sitzung endet und zur Terminal-Eingabeaufforderung zurückkehrt.

  3. Verbinde dich erneut mit Redis:

    redis-cli
    
  4. Jetzt kannst du den Befehl UNSUBSCRIBE ausführen (obwohl dies nicht unbedingt erforderlich ist, da das Trennen der Verbindung das Abonnement bereits beendet hat):

    UNSUBSCRIBE mychannel
    

Hinweis: Als du Strg+C (Ctrl+C) gedrückt hast, hast du die Verbindung zu allen Abonnements bereits getrennt. Der Befehl UNSUBSCRIBE wird zu Demonstrationszwecken gezeigt, aber in der Praxis beendet das Trennen der Verbindung automatisch deine Abonnements für alle Kanäle.

Die Ausgabe in Terminal 1 sieht wie folgt aus:

1) "unsubscribe"
2) "mychannel"
3) (integer) 0

Schlüsseln wir die Ausgabe auf:

  • "unsubscribe": Dies zeigt an, dass du ein Kanalabonnement beendet hast.
  • "mychannel": Dies ist der Name des Kanals, dessen Abonnement du beendet hast.
  • (integer) 0: Dies ist die Anzahl der Kanäle, die du derzeit abonniert hast. Sie ist nun 0, da du das Abonnement für mychannel beendet hast.

Terminal 2: Veröffentlichung nach dem Abbestellen testen

Wechsle nun zu Terminal 2 und veröffentliche eine weitere Nachricht auf mychannel:

PUBLISH mychannel "Is anyone still there?"

Die Ausgabe in Terminal 2 lautet:

(integer) 0

Dies zeigt an, dass keine Clients die Nachricht erhalten haben, da du das Abonnement für den Kanal in Terminal 1 beendet hast.

Verifizieren, dass keine Nachricht empfangen wurde

Schaue dir Terminal 1 an – du wirst feststellen, dass keine neue Nachricht angezeigt wird, da du das Abonnement für den Kanal beendet hast.

Dies veranschaulicht, wie das Beenden eines Kanalabonnements verhindert, dass du weitere auf diesem Kanal veröffentlichte Nachrichten erhältst, während der Publisher weiterhin Nachrichten senden kann (die jedoch niemand empfängt).

Wichtig: Lass beide Terminals und ihre redis-cli-Sitzungen für den nächsten Schritt aktiv.

Muster-Abonnement mit PSUBSCRIBE

In diesem Schritt lernst du, wie du Kanäle in Redis mithilfe von Mustern (Patterns) und dem Befehl PSUBSCRIBE abonnierst. Mit PSUBSCRIBE kannst du mehrere Kanäle abonnieren, die einem bestimmten Muster entsprechen. Dies ist nützlich, wenn du Nachrichten von einer Gruppe verwandter Kanäle empfangen möchtest, ohne jeden einzelnen Kanal manuell abonnieren zu müssen.

Terminal 1: Muster-Abonnement (Pattern Subscribe)

Da du das Abonnement für mychannel im vorherigen Schritt beendet hast, sollte Terminal 1 nun wieder eine reguläre Redis-Eingabeaufforderung anzeigen.

Abonniere in Terminal 1 Kanäle, die dem Muster news.* entsprechen, mit dem Befehl PSUBSCRIBE:

PSUBSCRIBE news.*

Die Ausgabe sieht in etwa so aus:

Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.*"
3) (integer) 1

Schlüsseln wir die Ausgabe auf:

  • "psubscribe": Dies zeigt an, dass du ein Muster erfolgreich abonniert hast.
  • "news.*": Dies ist das Muster, das du abonniert hast. Das .* ist ein Platzhalter (Wildcard), der auf beliebige Zeichen passt.
  • (integer) 1: Dies ist die Anzahl der Muster, die du derzeit abonniert hast.

Terminal 2: Auf musterübereinstimmenden Kanälen veröffentlichen

Gehe zu Terminal 2 und veröffentliche eine Nachricht auf dem Kanal news.sports mit dem Befehl PUBLISH:

PUBLISH news.sports "Sports news update!"

Die Ausgabe in Terminal 2 gibt die Anzahl der Abonnenten an, die die Nachricht erhalten haben:

(integer) 1

Musterübereinstimmung (Pattern Matching) beobachten

Wechsle zurück zu Terminal 1 (wo du das Muster abonniert hast). Du solltest die soeben veröffentlichte Nachricht sehen:

1) "pmessage"
2) "news.*"
3) "news.sports"
4) "Sports news update!"

Dies zeigt:

  • "pmessage": Zeigt an, dass es sich um eine musterübereinstimmende Nachricht handelt.
  • "news.*": Das Muster, das übereingestimmt hat.
  • "news.sports": Der tatsächliche Kanal, auf dem die Nachricht veröffentlicht wurde.
  • "Sports news update!": Der Nachrichteninhalt.

Mehrere Kanäle testen

Versuche in Terminal 2, auf verschiedenen Kanälen zu veröffentlichen, die dem Muster entsprechen:

PUBLISH news.technology "New AI breakthrough!"
PUBLISH news.weather "Sunny skies ahead!"
PUBLISH sports.basketball "This won't match the pattern"

Beobachte in Terminal 1, dass nur Nachrichten von news.*-Kanälen empfangen werden, während sports.basketball ignoriert wird, da es nicht zum Muster news.* passt.

Wichtig: Lass beide Terminals und ihre redis-cli-Sitzungen aktiv. Das Muster-Abonnement zeigt, wie du gleichzeitig mehrere verwandte Kanäle überwachen kannst.

Zusammenfassung

In diesem Lab hast du die Grundlagen des Redis Pub/Sub-Messagings kennengelernt. Du hast gelernt, wie man Kanäle mit dem Befehl SUBSCRIBE abonniert, Nachrichten mit dem Befehl PUBLISH auf Kanälen veröffentlicht, Abonnements mit dem Befehl UNSUBSCRIBE beendet und Kanäle mithilfe von Mustern mit dem Befehl PSUBSCRIBE abonniert. Diese Befehle sind unerlässlich für die Entwicklung von Echtzeit-Messaging-Anwendungen mit Redis.