2017-08-01 34 views
2

尋找使用StackExchange.Redis客戶端時處理臨時網絡問題的指導。使用StackExchange處理瞬時網絡錯誤.Redis

爲了說明起見,我並不是說最初使用ConnectionMultiplexer.Connect()連接到Redis服務器。我指的是如何處理在操作中出於任何原因而中斷的連接。 (我們可以假設命令是冪等的,StringSet,StringGet)

我問,因爲我們正在從ServiceStack遷移到StackExchange客戶端。在我們正在替換的代碼中,它使用ServiceStack,捕獲異常並在短的thread.sleep()之後再次嘗試操作。這種情況在我們的生產環境中相當頻繁地發生,並且在大多數情況下重試都可以工作。

通常它與「一個已建立的連接是通過軟件在主機中止」的消息一System.Net.SocketException或

如果一個系統「的現有連接被強行關閉遠程主機」。 Net.SocketException被拋出,StackExchange.Redis會自動重試,直到syncTimeout時間已過?

如果SE.Redis不會自動重試,那麼在初始操作失敗和我們的代碼中重試之間是否存在應該發生的建議步驟?如:

  • 等待一小段時間?
  • 重新創建多路複用器? (我猜不是)
  • 調用Close()和Configure()?

感謝您的任何指導。

回答

1

它不會自動重試。如果發生錯誤,您需要抓住並重試自己。

就實際重試而言,只要某些多路複用器的連接仍然存在,您可以退後一步並重試。

如果連接失敗,會嘗試恢復,但存在長期存在的問題,它可能會間歇性地進入某種不可恢復的狀態並保持斷開狀態。我們通過重新創建多路複用器來解決此問題,如果IsConnected曾經返回false

+0

謝謝你的建議。你是否意識到有一個線索提供了關於你提到的長期錯誤的更多信息? – eoldre

+0

在github上打開了大約一打的副本 https://github.com/StackExchange/StackExchange.Redis/issues/269 –