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

Czy Stackexchange.Redis „odpal i zapomnij” gwarantuje dostawę?

W rzeczywistości protokół Redis tak naprawdę nie obsługuje operacji „uruchom i zapomnij”. Z wyjątkiem ruchu pub/sub, wszystkie polecenia Redis są dopasowywane do odpowiedzi i nie ma sposobu, aby powiedzieć serwerowi Redis, aby pominął odpowiedź.

Teraz niektórzy klienci (takie jak StackExchange.Redis) symulują tryb „uruchom i zapomnij” poprzez asynchroniczną implementację protokołu. W rzeczywistości tryb „uruchom i zapomnij” w StackExchange.Redis jest bardzo podobny do trybu „asynchronicznego”, z wyjątkiem tego, że odpowiedzi są po prostu odrzucane po ich otrzymaniu.

Czy to jest wiarygodne? Cóż, gwarantuje dostawę, o ile TCP/IP gwarantuje dostawę. Sieć będzie usilnie próbowała przesłać pakiety (w końcu pakiety zostaną przesłane ponownie, jeśli część z nich zostanie utracona), ale wszystko to jest obsługiwane przez TCP.

Teraz, jeśli serwer nie działa lub zdecyduje się zamknąć połączenie, klient będzie świadomy tylko wtedy, gdy spróbuje odczytać z gniazda. StackExchange.Redis może przez jakiś czas szczęśliwie kontynuować wysyłanie poleceń w niedziałającym połączeniu. Jeśli masz pośrednika (takiego jak Twemproxy), sytuacja może być jeszcze gorsza.

Innymi słowy, ruch typu „odpal i zapomnij” będzie zazwyczaj wysyłany do serwera i żadna wiadomość nie zostanie utracona w sieci, ale jeśli masz problemy z serwerem lub połączeniem, część ruchu może zostać utracona, zanim klient będzie miał szansę zauważyć to. Nazwałbym to zachowaniem typu „najlepszy wysiłek”.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Złożoność czasowa zadd, gdy wartość ma wynik wyższy niż najwyższy wynik obecny w docelowym posortowanym zestawie

  2. Jakie są przypadki użycia, w których Redis jest lepszy od Aerospike?

  3. skonfiguruj autoryzację redis na sidekiq

  4. Wprowadzenie do Redis Cluster Sharding — zalety, ograniczenia, wdrażanie i połączenia z klientami

  5. Uruchamianie nadzorowane z hosta, seler z virtualenv (aplikacja Django)