sql >> Database >  >> NoSQL >> Redis

Wat zijn de belangrijkste verschillen tussen Redis Pub/Sub en Redis Stream?

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.




  1. Mangoest _id en strings vergelijken

  2. HBase BlockCache 101

  3. Redis:mogelijk om een ​​element in een array of gesorteerde set te laten verlopen?

  4. Redis Object Cache gebruiken om uw WordPress-installatie te versnellen