Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Redis Pub/Sub z niezawodnością

Gdy umrze subskrybent (konsument), Twoja lista będzie się powiększać, aż do powrotu klienta. Twój producent może przyciąć listę (z dowolnej strony), gdy osiągnie określony limit, ale jest to coś, z czym musisz sobie poradzić na poziomie aplikacji. Jeśli w każdej wiadomości umieścisz znacznik czasu, klient może działać zgodnie z wiekiem wiadomości, zakładając, że masz logikę aplikacji, którą chcesz wymusić na wieku wiadomości.

Nie jestem pewien, w jaki sposób zniekształcona wiadomość dostałaby się do systemu, ponieważ połączenie z Redis to zwykle TCP z gwarancją integralności. Ale jeśli tak się stanie, być może z powodu błędu w kodowaniu wiadomości w warstwie producenta, możesz zapewnić ogólny mechanizm obsługi błędów poprzez utrzymywanie kolejki na producenta, który otrzymał komunikaty o wyjątkach konsumenta.

Zasady ponawiania będą w dużej mierze zależeć od potrzeb aplikacji. Jeśli potrzebujesz stuprocentowej pewności, że wiadomość została odebrana i przetworzona, powinieneś rozważyć użycie transakcji Redis (MULTI/EXEC) do podsumowania pracy wykonanej przez konsumenta, aby mieć pewność, że klient nie usunie wiadomości, chyba że zakończył swoją pracę. Jeśli potrzebujesz wyraźnego potwierdzenia, możesz użyć wyraźnego komunikatu ACK w kolejce dedykowanej procesowi (procesom) producenta.

Nie wiedząc więcej o potrzebach aplikacji, trudno jest wiedzieć, jak mądrze wybierać. Ogólnie rzecz biorąc, jeśli Twoje wiadomości wymagają pełnej ochrony ACID, prawdopodobnie będziesz potrzebować również transakcji redis. Jeśli Twoje wiadomości mają znaczenie tylko wtedy, gdy są na czas, transakcje mogą nie być potrzebne. Wygląda na to, że nie możesz tolerować porzuconych wiadomości, więc twoje podejście do korzystania z listy jest dobre. Jeśli potrzebujesz zaimplementować kolejkę priorytetów dla swoich wiadomości, możesz użyć posortowanego zestawu (polecenia Z) do przechowywania wiadomości, używając ich priorytetu jako wartości wyniku, wraz z odpytującym konsumentem.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak przechowywać zagregowane wyniki wyszukiwania w drzewie katalogów w Redis

  2. Jak przekazywać dane między wieloma stanami Lua (wielowątkowymi)?

  3. Django - Jak korzystać z asynchronicznej kolejki zadań z selerem i redis

  4. Programowe niszczenie / usuwanie Queue() w Redis Queue (rq)

  5. redis — Używanie haszów