Archiviazione dati
Pub/Sub è una piattaforma editore/abbonato, non è un archivio dati. I messaggi pubblicati svaniscono, indipendentemente dalla presenza di un abbonato.
In Redis Streams, lo stream è un tipo di dati, una struttura di dati a sé stante. I messaggi o le voci vengono archiviati in memoria e rimangono lì fino a quando non viene richiesto di essere eliminati.
Comunicazione sincrona/asincrona (Push/Pull)
Pub/Sub è una comunicazione sincrona (push protocollo). Tutte le parti devono essere attive contemporaneamente per poter comunicare. Qui Redis è un puro broker di messaggistica sincrona.
Redis Streams consente entrambi i sincroni (XREAD
con BLOCK
e lo speciale $
L'ID è un push protocollo) e comunicazione asincrona (normale XREAD
è un attrazione protocollo). XREAD
con BLOCK
è come Pub/Sub, ma con la possibilità di riprendere alla disconnessione senza perdere i messaggi.
Semantica della consegna
Pub/Sub è At-most-once, ovvero "spara e dimentica".
Redis Streams consente sia At-most-once-At-least-once (riconoscimento esplicito inviato dal destinatario)
Modalità di blocco per i consumatori
Pub/Sub è solo in modalità di blocco. Una volta iscritto a un canale, il client viene messo in modalità abbonato e non può emettere comandi (tranne [P]SUBSCRIBE
, [P]UNSUBSCRIBE
, PING
e QUIT
), è diventato di sola lettura.
Redis Streams consente ai consumatori di leggere i messaggi in modalità di blocco o meno.
Fan out
Pub/Sub è solo fan-out. Tutti i client attivi ricevono tutti i messaggi.
Redis Streams consente il fan-out (con XREAD
), ma anche per fornire un diverso sottoinsieme di messaggi dallo stesso flusso a più client. Ciò consente di ridimensionare l'elaborazione dei messaggi, instradando messaggi diversi a lavoratori diversi, in modo che non sia possibile che lo stesso messaggio venga recapitato a più consumatori. Quest'ultimo scenario si ottiene con gruppi di consumatori .
Redis Streams fornisce molte più funzionalità, come timestamp, coppie di valori di campo, intervalli, ecc. Ciò non significa che dovresti sempre scegliere Stream. Se il tuo caso d'uso può essere ottenuto con Pub/Sub, allora è meglio usare Pub/Sub. Con Streams, devi preoccuparti dell'utilizzo della memoria.