2014-08-31 27 views

回答

4

實際上,Redis協議並不真正支持「火災和遺忘」操作。除pub/sub流量之外,所有Redis命令都與回覆相匹配,並且無法告訴Redis服務器忽略回覆。

現在一些客戶端(如StackExchange.Redis)通過協議的異步實現來模擬「火災和遺忘」模式。實際上,StackExchange.Redis中的「fire and forget」模式與「異步」模式非常相似,除了回覆在收到時簡單地被丟棄。

可靠嗎?那麼,它確保交付就TCP/IP保證交付。網絡將盡力傳輸數據包(最終數據包將在其中一些丟失時再次傳輸),但這全部由TCP處理。

現在,如果服務器關閉,或者決定關閉連接,則客戶端只有在嘗試從套接字讀取時纔會知道。 StackExchange.Redis可能會愉快地繼續發送一個死連接命令一段時間。如果你有一個middletier(比如Twemproxy),情況會更糟。換句話說,「火災和遺忘」的流量通常會被髮送到服務器,並且網絡上不會有任何消息丟失,但是如果您有服務器或連接問題,在客戶端之前可能會丟失一些流量有機會注意到它。我會稱之爲盡力而爲的行爲。

+0

謝謝。我的問題主要是它是否通過庫或底層TCP提供重試,並基於你的答案似乎是的。 – DTown 2014-09-08 14:17:24