Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Was sind die Hauptunterschiede zwischen Redis Pub/Sub und Redis Stream?

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.