Redis Pub/Sub Messaging

RedisBeginner
Jetzt üben

Einführung

In diesem Lab werden Sie das Pub/Sub-Nachrichtensystem von Redis erkunden. Sie lernen, wie Sie Kanäle abonnieren, Nachrichten veröffentlichen und sich abmelden. Dieses Lab führt Sie durch die grundlegenden Operationen mit den Befehlen SUBSCRIBE, PUBLISH, UNSUBSCRIBE und PSUBSCRIBE.

Kanal mit SUBSCRIBE abonnieren

In diesem Schritt lernen Sie, wie Sie mit dem Befehl SUBSCRIBE einen Kanal in Redis abonnieren. Das Abonnieren eines Kanals ermöglicht es Ihnen, Nachrichten zu empfangen, die an diesen Kanal gesendet werden. Dies ist ein grundlegendes Konzept im Pub/Sub-Nachrichtensystem von Redis.

Terminal 1: Kanal abonnieren

Öffnen Sie Ihr erstes Terminal (wir nennen es Terminal 1). Sie können das in der LabEx-Umgebung bereitgestellte Xfce-Terminal verwenden.

Verbinden Sie sich mit dem Redis-Server mit dem Befehl redis-cli:

redis-cli

Sie sollten die Redis-Eingabeaufforderung sehen: 127.0.0.1:6379>.

Abonnieren Sie einen Kanal namens mychannel mit dem Befehl SUBSCRIBE:

SUBSCRIBE mychannel

Die Ausgabe wird ähnlich wie folgt aussehen:

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

Lassen Sie uns die Ausgabe aufschlüsseln:

  • "subscribe": Dies zeigt an, dass Sie erfolgreich einen Kanal abonniert haben.
  • "mychannel": Dies ist der Name des Kanals, den Sie abonniert haben.
  • (integer) 1: Dies ist die Anzahl der Kanäle, die Sie derzeit abonniert haben.

Wichtig: Halten Sie Terminal 1 mit der aktiven redis-cli-Sitzung geöffnet und auf den Kanal abonniert. Schließen Sie dieses Terminal NICHT und drücken Sie NICHT Strg+C, da Sie sich sonst vom Kanal abmelden würden. Wir werden im nächsten Schritt ein zweites Terminal zum Senden von Nachrichten verwenden.

Nachrichten mit PUBLISH senden

In diesem Schritt lernen Sie, wie Sie mit dem Befehl PUBLISH Nachrichten an einen Kanal in Redis senden. Das Senden von Nachrichten ist die Kernfunktionalität des Pub/Sub-Systems und ermöglicht es Ihnen, Daten an alle Abonnenten eines bestimmten Kanals zu senden.

Terminal 2: Nachrichten senden

Öffnen Sie ein zweites Terminal (wir nennen es Terminal 2). Sie können einen neuen Tab in Ihrem Xfce-Terminal öffnen.

Verbinden Sie sich mit dem Redis-Server mit dem Befehl redis-cli:

redis-cli

Sie sollten die Redis-Eingabeaufforderung sehen: 127.0.0.1:6379>.

Senden Sie nun eine Nachricht an den Kanal mychannel mit dem Befehl PUBLISH:

PUBLISH mychannel "Hello, Redis!"

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

(integer) 1

In diesem Fall ist die Ausgabe (integer) 1, da Sie in Terminal 1 aus dem vorherigen Schritt ein aktives Abonnement für mychannel haben.

Nachricht in Terminal 1 beobachten

Wechseln Sie nun zurück zu Terminal 1 (wo Sie in Schritt 1 mychannel abonniert haben). Sie sollten die gerade gesendete Nachricht in Echtzeit sehen:

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

Dies zeigt:

  • "message": Zeigt an, dass dies eine gesendete Nachricht ist
  • "mychannel": Der Kanal, an den die Nachricht gesendet wurde
  • "Hello, Redis!": Der eigentliche Nachrichteninhalt

Echtzeit-Nachrichten testen

Sie können nun mit Echtzeit-Nachrichten experimentieren:

  1. Gehen Sie zurück zu Terminal 2 und senden Sie weitere Nachrichten
  2. Wechseln Sie zu Terminal 1, um zu sehen, wie sie sofort erscheinen
  3. Versuchen Sie, verschiedene Nachrichten zu senden, um die Live-Kommunikation zu beobachten

Beispiel – in Terminal 2:

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

Wichtig: Halten Sie 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.

Mit UNSUBSCRIBE abmelden

In diesem Schritt lernen Sie, wie Sie sich mit dem Befehl UNSUBSCRIBE von einem Kanal in Redis abmelden. Das Abmelden entfernt einen Client aus der Liste der Abonnenten für einen bestimmten Kanal und verhindert, dass er weitere Nachrichten empfängt, die an diesen Kanal veröffentlicht werden.

Terminal 1: Beenden des Abonnementmodus

Wechseln Sie zu Terminal 1 (wo Sie derzeit mychannel abonniert haben). Sie sollten den Abonnementstatus sehen, der "Nachrichten lesen..." (drücken Sie Strg-C zum Beenden) anzeigt.

Da sich Terminal 1 im Abonnementmodus befindet, können Sie keine regulären Redis-Befehle direkt ausführen. Um sich abzumelden, müssen Sie zuerst den Abonnementmodus beenden:

  1. Drücken Sie Strg+C, um den Abonnementmodus zu beenden.

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

  3. Stellen Sie erneut eine Verbindung zu Redis her:

    redis-cli
  4. Jetzt können Sie den Befehl UNSUBSCRIBE ausführen (obwohl er nicht notwendig ist, da die Trennung Sie bereits abgemeldet hat):

    UNSUBSCRIBE mychannel

Hinweis: Als Sie Strg+C gedrückt haben, haben Sie sich tatsächlich bereits von allen Abonnements getrennt. Der Befehl UNSUBSCRIBE wird zu Demonstrationszwecken angezeigt, aber in der Praxis meldet Sie die Trennung automatisch von allen Kanälen ab.

Die Ausgabe in Terminal 1 wird wie folgt aussehen:

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

Lassen Sie uns die Ausgabe aufschlüsseln:

  • "unsubscribe": Dies zeigt an, dass Sie sich von einem Kanal abgemeldet haben.
  • "mychannel": Dies ist der Name des Kanals, von dem Sie sich abgemeldet haben.
  • (integer) 0: Dies ist die Anzahl der Kanäle, die Sie derzeit abonniert haben. Sie ist jetzt 0, da Sie sich von mychannel abgemeldet haben.

Terminal 2: Testen der Veröffentlichung nach der Abmeldung

Wechseln Sie nun zu Terminal 2 und veröffentlichen Sie eine weitere Nachricht an mychannel:

PUBLISH mychannel "Is anyone still there?"

Die Ausgabe in Terminal 2 wird sein:

(integer) 0

Dies zeigt an, dass keine Clients die Nachricht empfangen haben, da Sie sich in Terminal 1 von dem Kanal abgemeldet haben.

Überprüfen, dass keine Nachricht empfangen wurde

Schauen Sie in Terminal 1 – Sie sollten feststellen, dass keine neue Nachricht erscheint, da Sie sich von dem Kanal abgemeldet haben.

Dies zeigt, wie das Abmelden von einem Kanal Sie daran hindert, weitere Nachrichten zu empfangen, die an diesen Kanal veröffentlicht werden, während der Publisher weiterhin Nachrichten senden kann (aber niemand sie empfängt).

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

Mit PSUBSCRIBE nach Mustern abonnieren

In diesem Schritt lernen Sie, wie Sie mit dem Befehl PSUBSCRIBE in Redis Kanäle mithilfe von Mustern abonnieren. PSUBSCRIBE ermöglicht es Ihnen, mehrere Kanäle zu abonnieren, die einem bestimmten Muster entsprechen. Dies ist nützlich, wenn Sie Nachrichten von einer Gruppe verwandter Kanäle empfangen möchten, ohne jeden einzelnen abonnieren zu müssen.

Terminal 1: Muster abonnieren

Da Sie sich im vorherigen Schritt von mychannel abgemeldet haben, sollte Terminal 1 nun eine normale Redis-Eingabeaufforderung anzeigen.

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

PSUBSCRIBE news.*

Die Ausgabe wird in etwa so aussehen:

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

Lassen Sie uns die Ausgabe aufschlüsseln:

  • "psubscribe": Dies zeigt an, dass Sie sich erfolgreich für ein Muster angemeldet haben.
  • "news.*": Dies ist das Muster, das Sie abonniert haben. .* ist ein Platzhalter, der beliebige Zeichen abgleicht.
  • (integer) 1: Dies ist die Anzahl der Muster, die Sie derzeit abonniert haben.

Terminal 2: Veröffentlichen an Muster-abgleichende Kanäle

Gehen Sie zu Terminal 2 und senden Sie eine Nachricht an den Kanal news.sports mit dem Befehl PUBLISH:

PUBLISH news.sports "Sports news update!"

Die Ausgabe in Terminal 2 ist die Anzahl der Abonnenten, die die Nachricht empfangen haben:

(integer) 1

Musterabgleich beobachten

Wechseln Sie zurück zu Terminal 1 (wo Sie das Muster abonniert haben). Sie sollten die gerade gesendete Nachricht sehen:

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

Dies zeigt:

  • "pmessage": Zeigt an, dass dies eine durch Muster abgeglichene Nachricht ist
  • "news.*": Das Muster, das abgeglichen wurde
  • "news.sports": Der tatsächliche Kanal, an den die Nachricht gesendet wurde
  • "Sports news update!": Der Nachrichteninhalt

Mehrere Kanäle testen

Versuchen Sie in Terminal 2, Nachrichten an verschiedene Kanäle zu senden, 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"

Beobachten Sie in Terminal 1, dass nur die news.*-Kanäle empfangen werden, während sports.basketball nicht empfangen wird, da es nicht dem news.*-Muster entspricht.

Wichtig: Halten Sie beide Terminals und ihre redis-cli-Sitzungen aktiv. Das Musterabonnement zeigt, wie Sie gleichzeitig auf mehrere verwandte Kanäle hören können.

Zusammenfassung

In diesem Lab haben Sie die Grundlagen der Redis Pub/Sub-Nachrichtenübermittlung erkundet. Sie haben gelernt, wie Sie Kanäle mit dem Befehl SUBSCRIBE abonnieren, Nachrichten mit dem Befehl PUBLISH an Kanäle senden, sich mit dem Befehl UNSUBSCRIBE von Kanälen abmelden und Kanäle mit Mustern über den Befehl PSUBSCRIBE abonnieren. Diese Befehle sind unerlässlich für die Entwicklung von Echtzeit-Messaging-Anwendungen mit Redis.