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ă. |