Datenspeicherung
Pub/Sub ist eine Publisher/Subscriber-Plattform, keine Datenspeicherung. Veröffentlichte Nachrichten verschwinden, unabhängig davon, ob es Abonnenten gab.
In Redis Streams ist Stream ein Datentyp, eine eigenständige Datenstruktur. Nachrichten oder Einträge werden im Speicher gespeichert und bleiben dort, bis sie zum Löschen aufgefordert werden.
Sync/Async-Kommunikation (Push/Pull)
Pub/Sub ist eine synchrone Kommunikation (Push Protokoll). Alle Parteien müssen gleichzeitig aktiv sein, um kommunizieren zu können. Hier ist Redis ein reiner synchroner Messaging-Broker.
Redis Streams ermöglichen sowohl synchrone (XREAD
mit BLOCK
und das spezielle $
ID ist ein Push Protokoll) und asynchrone Kommunikation (reguläres XREAD
ist ein Zug Protokoll). XREAD
mit BLOCK
ist wie Pub/Sub, aber mit der Möglichkeit, die Verbindung fortzusetzen, ohne Nachrichten zu verlieren.
Lieferungssemantik
Pub/Sub ist At-most-once, d. h. „feuern und vergessen“.
Redis Streams ermöglicht sowohl „At-most-once“ als auch „At-least-once“ (explizite Bestätigung, die vom Empfänger gesendet wird)
Sperrmodus für Verbraucher
Pub/Sub ist nur im Blockiermodus. Sobald ein Kanal abonniert ist, wird der Client in den Abonnentenmodus versetzt und kann keine Befehle ausgeben (außer [P]SUBSCRIBE
, [P]UNSUBSCRIBE
, PING
und QUIT
), ist es schreibgeschützt geworden.
Redis Streams ermöglicht Verbrauchern, Nachrichten im Blockiermodus zu lesen oder nicht.
Auffächern
Pub/Sub ist nur Fan-Out. Alle aktiven Clients erhalten alle Nachrichten.
Redis Streams ermöglicht Fan-Out (mit XREAD
), sondern auch, um vielen Clients eine andere Teilmenge von Nachrichten aus demselben Stream bereitzustellen. Dies ermöglicht die Skalierung der Nachrichtenverarbeitung, indem verschiedene Nachrichten an verschiedene Worker weitergeleitet werden, sodass es nicht möglich ist, dass dieselbe Nachricht an mehrere Verbraucher übermittelt wird. Dieses letzte Szenario wird mit Verbrauchergruppen erreicht .
Redis Streams bieten viele weitere Funktionen, wie Zeitstempel, Feld-Wert-Paare, Bereiche usw. Das bedeutet nicht, dass Sie sich immer für Streams entscheiden sollten. Wenn Ihr Anwendungsfall mit Pub/Sub erreicht werden kann, sollten Sie dann besser auf Pub/Sub zurückgreifen. Bei Streams müssen Sie sich um die Speichernutzung kümmern.