Redis Pub/Sub

Pub/Sub ist ein Mittel, um Daten von einer beliebigen Anzahl von Datenverlegern zu sammeln und es einem oder mehreren Abonnenten zu ermöglichen, den Feed in Echtzeit zu konsumieren, ohne sich direkt mit den Verlegern verbinden zu müssen. Mit diesem Muster lassen sich die Systeme leichter skalieren, und Herausgeber und Abonnenten können jederzeit hinzugefügt oder entfernt werden.

Redis ermöglicht die Erstellung von Pub/Sub-Kanälen, an die sich Publisher und Subscriber anschließen. Nachrichten auf einem Kanal werden höchstens einmal an jeden Abonnenten gesendet, was sie ideal für Auslöseaktionen macht, die nicht dupliziert werden dürfen, aber Vorsicht, denn einmal zugestellt, wird eine Kanalnachricht nicht aufbewahrt.

Anwendungsfälle:

  • Nachricht in Echtzeit.
  • Ephemerer Mehrbenutzer-Chat.
  • Log-Streaming.

Abonnieren eines Kanals

Ein Abonnent gibt einfach ein "SUBSCRIBE "um mit dem Abonnieren eines Kanals zu beginnen:

> SUBSCRIBE mychannel

Wenn ein Abonnent mehr als einen Kanal abonnieren möchte, ist dies ebenfalls möglich:

> SUBSCRIBE mychannel1 mychannel2 mychannel3

Das Abonnieren eines Kanals bedeutet, dass der Abonnent alle Nachrichten empfängt, die in diesem Kanal veröffentlicht werden , nachdem er ihn abonniert hat. Ältere Nachrichten werden nicht aufbewahrt, so dass der Abonnent verbunden und abonniert sein muss, um Nachrichten zu erhalten, sobald sie erscheinen.

Wenn der Kanal nicht existiert, sieht der Teilnehmer keine Fehler und auch keine Nachrichten.

Veröffentlichung in einem Kanal

Ein Verleger kann mit dem Befehl " PUBLISH <channel> <message> in einem Kanal veröffentlichen:

> PUBLISH mychannel "my first message"

und alle Abonnenten erhalten die Nachricht wie folgt:

1) "message"
2) "mychannel"
3) "my first message"

Die Abonnementnachricht enthält den Kanalnamen und die Nachricht selbst.

Ein gängiges Muster ist das Senden von JSON-Objekten als Nachrichtentext:

> PUBLISH mychannel '{"id":"1234","name":"db14","msg":"Out of Memory"}'

Der Rückgabewert von ' PUBLISH ist eine ganze Zahl, die dem Aufrufer mitteilt, wie viele Teilnehmer die Nachricht erhalten haben.

Selektives Abonnement

Anstatt ganze Kanäle zu abonnieren, ist es möglich, Wildcard-Kanäle zu abonnieren. Durch umsichtige Benennung der Kanäle kann dies hilfreich sein, um z. B. alle Protokolle einer Anwendung, nur die Produktionsprotokolle oder nur die Protokolle der Produktionsdatenbank zu sehen.

> PSUBSCRIBE *
> PSUBSCRIBE prod_*
> PSUBSCRIBE prod_database_*
> PSUBSCRIBE prod_database_db57_activity_*

Abbestellen

Ein Abonnent kann alle von ihm abonnierten Kanäle mit abbestellen:

> UNSUBSCRIBE

Weitere Referenzen