2014-08-31 5 views

Odpowiedz

4

W rzeczywistości protokół Redis nie obsługuje operacji "pożar i zapomnij". Z wyjątkiem ruchu pub/sub, wszystkie polecenia Redis są dopasowane do odpowiedzi i nie ma sposobu, aby powiedzieć serwerowi Redis, aby pominąć odpowiedź.

Teraz niektórzy klienci (np. StackExchange.Redis) symulują tryb "ogień i zapomnij" poprzez asynchroniczną implementację protokołu. W rzeczywistości tryb "ogień i zapomnij" w StackExchange.Redis jest bardzo podobny do trybu "asynchronicznego", z tym wyjątkiem, że odpowiedzi są po prostu odrzucane, gdy są odbierane.

Czy to jest niezawodne? Cóż, gwarantuje dostawę, o ile TCP/IP gwarantuje dostawę. Sieć będzie się starała przesłać pakiety (ostatecznie pakiety zostaną przesłane ponownie, jeśli niektóre z nich zostaną utracone), ale wszystko to jest obsługiwane przez TCP.

Teraz, jeśli serwer jest wyłączony lub zdecydować o zamknięciu połączenia, klient będzie wiedział tylko, kiedy próbuje odczytać z gniazda. StackExchange.Redis może z przyjemnością kontynuować wysyłanie komend przez niedziałające połączenie przez pewien czas. Jeśli posiadasz middletier (taki jak Twemproxy), sytuacja może być jeszcze gorsza.

Innymi słowy, ruch "strzelaj i zapomnij" będzie generalnie wysyłany na serwer, a ż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 szansę na zauważenie tego. Nazwałbym to zachowaniem typu "best effort".

+0

Dziękuję. Moje pytanie było w dużej mierze nadal oferuje ponowną próbę albo przez bibliotekę albo bazowy TCP i na podstawie twojej odpowiedzi wydaje się, że tak. – DTown