sql >> Databáze >  >> NoSQL >> Redis

Jaké jsou hlavní rozdíly mezi Redis Pub/Sub a Redis Stream?

Ukládání dat

Pub/Sub je platforma Publisher/Subscriber, není to úložiště dat. Publikované zprávy se vypařují, bez ohledu na to, zda tam byl nějaký odběratel.

V Redis Streams je stream datový typ, datová struktura sama o sobě. Zprávy nebo záznamy jsou uloženy v paměti a zůstanou tam, dokud nedostanete příkaz k vymazání.

Synchronizovaná/Asynchronní komunikace (Push/Pull)

Pub/Sub je synchronní komunikace (push protokol). Všechny strany musí být aktivní zároveň, aby mohly komunikovat. Zde je Redis čistě synchronní zprostředkovatel zpráv.

Redis Streams umožňují obojí synchronní (XREAD s BLOCK a speciální $ ID je push protokol) a asynchronní komunikace (běžná XREAD je tah protokol). XREAD s BLOCK je jako Pub/Sub, ale se schopností pokračovat po odpojení bez ztráty zpráv.

Sémantika zobrazování

Pub/Sub je At-most-once, tedy „vypal a zapomeň“.

Redis Streams umožňuje jak At-most-once, tak At-least-once (explicitní potvrzení zaslané příjemcem)

Režim blokování pro spotřebitele

Pub/Sub je pouze v blokovacím režimu. Po přihlášení k odběru kanálu se klient přepne do režimu odběratele a nemůže zadávat příkazy (kromě [P]SUBSCRIBE , [P]UNSUBSCRIBE , PING a QUIT ), stal se pouze pro čtení.

Redis Streams umožňuje spotřebitelům číst zprávy v režimu blokování nebo ne.

Rozvětvení

Pub/Sub je pouze fan-out. Všichni aktivní klienti obdrží všechny zprávy.

Redis Streams umožňuje rozvětvení (pomocí XREAD ), ale také k poskytování různé podmnožiny zpráv ze stejného streamu mnoha klientům. To umožňuje škálování zpracování zpráv směrováním různých zpráv různým pracovníkům tak, že není možné, aby byla stejná zpráva doručena více spotřebitelům. Tohoto posledního scénáře lze dosáhnout pomocí skupin spotřebitelů .

Redis Streams poskytuje mnohem více funkcí, jako jsou časová razítka, páry pole-hodnota, rozsahy atd. Neznamená to, že byste měli vždy používat Streamy. Pokud lze váš případ použití dosáhnout pomocí Pub/Sub, je pro vás lepší použít Pub/Sub. U Streamů se musíte starat o využití paměti.




  1. chcete provozovat redis-server na pozadí nonstop

  2. Služba MongoDB ve Fedoře neběží

  3. Změna portu Redis v Docker Compose nefunguje

  4. Při kódování objektu se nepoužívá kodek MongoDB BSON