Gegevensopslag
Pub/Sub is een Publisher/Subscriber-platform, het is geen gegevensopslag. Gepubliceerde berichten verdampen, ongeacht of er een abonnee was.
In Redis Streams is stream een gegevenstype, een gegevensstructuur op zich. Berichten of vermeldingen worden in het geheugen opgeslagen en blijven daar totdat het bevel wordt gegeven om te worden verwijderd.
Sync/Async-communicatie (Push/Pull)
Pub/Sub is synchrone communicatie (push protocol). Alle partijen moeten tegelijkertijd actief zijn om te kunnen communiceren. Hier is Redis een pure synchrone berichtenmakelaar.
Redis Streams maken zowel synchrone (XREAD
met BLOCK
en de speciale $
ID is een push protocol) en asynchrone communicatie (reguliere XREAD
is een trek protocol). XREAD
met BLOCK
is als Pub/Sub, maar met de mogelijkheid om te hervatten wanneer de verbinding wordt verbroken zonder berichten te verliezen.
Leveringssemantiek
Pub/Sub is maximaal één keer, d.w.z. "vuur en vergeet".
Redis Streams staat zowel Ten minste één keer als Ten minste één keer toe (expliciete bevestiging verzonden door de ontvanger)
Blokkeermodus voor consumenten
Pub/Sub is alleen in de blokkeermodus. Eenmaal geabonneerd op een kanaal, wordt de client in de abonneemodus gezet en kan hij geen opdrachten geven (behalve voor [P]SUBSCRIBE
, [P]UNSUBSCRIBE
, PING
en QUIT
), is het alleen-lezen geworden.
Met Redis Streams kunnen consumenten berichten al dan niet in blokkeermodus lezen.
Uitwaaieren
Pub/Sub is alleen fan-out. Alle actieve klanten krijgen alle berichten.
Redis Streams staat fan-out toe (met XREAD
), maar ook om een andere subset van berichten van dezelfde stream aan veel klanten te bieden. Dit maakt het mogelijk om de verwerking van berichten te schalen door verschillende berichten naar verschillende werknemers te routeren, op een manier dat het niet mogelijk is dat hetzelfde bericht aan meerdere consumenten wordt bezorgd. Dit laatste scenario wordt bereikt met consumentengroepen .
Redis Streams bieden veel meer functies, zoals tijdstempels, veldwaardeparen, bereiken, enz. Dit betekent niet dat u altijd voor Streams moet gaan. Als uw use-case kan worden bereikt met Pub/Sub, kunt u beter Pub/Sub gebruiken. Met Streams moet je zorgen voor geheugengebruik.