Mesagerie în Timp Real: Redis Pub/Sub vs. Redis Streams în Redis & In-Memory Data Store

Înțelege diferențele majore dintre Redis Pub/Sub (mesagerie efemeră fire-and-forget) și Redis Streams (jurnal persistent de evenimente cu grupuri de consumatori).

Sintaxă comandă
SUBSCRIBE ch | XADD mystream * sensor-id 128 temp 19.8

Redis oferă două paradigme complet diferite pentru gestionarea fluxurilor de date și a mesageriei asincrone: Pub/Sub (Publish/Subscribe clasic de tip broadcast efemer) și Redis Streams (un jurnal persistent de evenimente inspirat din Apache Kafka, introdus în Redis 5.0).

1. Redis Pub/Sub: Mesagerie Efemeră (Fire-and-Forget)
# Consumator (Client A): Ascultă pe canalul 'notificari:alerta'
SUBSCRIBE notificari:alerta

# Sau ascultare pe un tipar de canale (Pattern Subscribe)
PSUBSCRIBE notificari:*

# Producător (Client B): Publică un mesaj
PUBLISH notificari:alerta "Atenție: Încărcare CPU peste 90% pe nodul 3"

# NOTĂ: Dacă un client este deconectat în momentul publicării, mesajul se pierde definitiv!
2. Redis Streams: Jurnal de Evenimente Persistent cu Confirmare (ACK)
# Producător: Adăugarea unui eveniment nou în stream-ul 'flux:comenzi'
# '*' generează automat ID-ul bazat pe timestamp (ex: 1735689600123-0)
XADD flux:comenzi * comanda_id 941 client_id 32 total 249.99

# Crearea unui grup de consumatori (Consumer Group) pentru procesare distribuită
XGROUP CREATE flux:comenzi grup_procesare $ MKSTREAM

# Consumator (Worker 1): Citirea unui mesaj nou din grup
# '>' înseamnă 'mesaje care nu au fost livrate încă altor consumatori din acest grup'
XREADGROUP GROUP grup_procesare worker_alpha COUNT 1 BLOCK 2000 STREAMS flux:comenzi >

# După procesarea cu succes a comenzii, confirmăm finalizarea (Acknowledgment)
XACK flux:comenzi grup_procesare 1735689600123-0
Caracteristică Redis Pub/Sub Redis Streams
Persistența mesajelor Nulă (efemeră). Mesajele nu se salvează în RAM sau pe disc. Completă. Mesajele sunt stocate în stream și salvate prin RDB/AOF.
Grupuri de consumatori Nu există (fiecare abonat primește o copie a mesajului). Da (distribuie sarcinile concurent între mai mulți workeri).
Mecanism de Acknowledgment Nu există confirmare de livrare. Da, prin comanda XACK (garantează cel puțin o livrare).
Scenariu ideal Camere de chat live, notificări UI instant, actualizări dashboard. Procesare comenzi e-commerce, conducte de date ETL, logare distribuită.