Przechowywanie danych
Pub/Sub to platforma wydawcy/subskrybenta, nie służy do przechowywania danych. Opublikowane wiadomości znikają, niezależnie od tego, czy był jakiś subskrybent.
W strumieniach Redis strumień jest typem danych, strukturą danych samą w sobie. Wiadomości lub wpisy są przechowywane w pamięci i pozostają tam do czasu wydania polecenia usunięcia.
Komunikacja synchronizacji/async (Push/Pull)
Pub/Sub to komunikacja synchroniczna (push protokół). Wszystkie strony muszą być aktywne w tym samym czasie, aby móc się komunikować. Tutaj Redis jest wyłącznie brokerem synchronicznych wiadomości.
Strumienie Redis pozwalają na synchroniczne (XREAD
z BLOCK
i specjalny $
Identyfikator to wypchnięcie protokołem) i komunikacji asynchronicznej (zwykły XREAD
to pociągnięcie protokół). XREAD
z BLOCK
jest jak Pub/Sub, ale z możliwością wznowienia po rozłączeniu bez utraty wiadomości.
Semantyka dostarczania
Pub/Sub to opcja „najwyżej raz”, czyli „uruchom i zapomnij”.
Redis Streams umożliwia zarówno co najmniej raz, jak i co najmniej raz (wyraźne potwierdzenie wysłane przez odbiorcę)
Tryb blokowania dla konsumentów
Pub/Sub działa tylko w trybie blokowania. Po zasubskrybowaniu kanału klient przechodzi w tryb subskrybenta i nie może wydawać poleceń (z wyjątkiem [P]SUBSCRIBE
, [P]UNSUBSCRIBE
, PING
i QUIT
), stała się tylko do odczytu.
Redis Streams pozwala konsumentom czytać wiadomości w trybie blokowania lub nie.
Rozwiń
Pub/Sub jest dostępny tylko w trybie fan-out. Wszyscy aktywni klienci otrzymują wszystkie wiadomości.
Redis Streams umożliwia rozszerzanie (za pomocą XREAD
), ale także w celu udostępnienia wielu klientom innego podzbioru komunikatów z tego samego strumienia. Umożliwia to skalowanie przetwarzania komunikatów przez kierowanie różnych komunikatów do różnych procesów roboczych w taki sposób, że ta sama wiadomość nie jest dostarczana do wielu konsumentów. Ten ostatni scenariusz jest osiągany dzięki grupom konsumenckim .
Strumienie Redis zapewniają znacznie więcej funkcji, takich jak sygnatury czasowe, pary wartości pól, zakresy itp. Nie oznacza to, że zawsze powinieneś wybierać strumienie. Jeśli Twój przypadek użycia można osiągnąć za pomocą Pub/Sub, lepiej będzie wtedy użyć Pub/Sub. W przypadku strumieni musisz dbać o wykorzystanie pamięci.