恢復連線

重試命令

設定客戶端連線,以使用指數輪詢重試命令。 如需詳細資訊,請參閱 重試指導方針

測試復原能力

使用 重新啟動 來模擬修補程式,測試系統的連線中斷復原能力。 如需測試效能的詳細資訊,請參閱 效能測試

Linux 裝載用戶端應用程式的 TCP 設定

某些 Linux 版本中的預設 TCP 設定可能會導致 Redis 伺服器連線失敗 13 分鐘以上。 如果連線未正常關閉,預設設定可以防止用戶端應用程式偵測已關閉的連線,並自動還原它們。

如果網路連線中斷,或 Redis 伺服器離線以進行非計畫性維護,則無法重新建立連線。

我們建議使用下列 TCP 設定:

設定
net.ipv4.tcp_retries2 5

如需案例的詳細資訊,請參閱在Linux上執行時,連線 ion 不會重新建立15分鐘。 雖然此討論與 StackExchange.Redis 連結庫有關,但 Linux 上執行的其他客戶端連結庫也會受到影響。 說明仍然很有用,而且您可以一般化至其他連結庫。

搭配使用 ForceReconnect 與 StackExchange.Redis

在罕見的情況下, StackExchange.Redis 在卸除連線之後無法重新連線。 在這些情況下,重新啟動用戶端或建立新的 ConnectionMultiplexer 修正問題。 建議您使用單一 ConnectionMultiplexer 模式,同時允許應用程式定期強制重新連線。 查看最符合應用程式所使用架構和平臺的快速入門範例專案。 您可以在我們的 快速入門中看到此程式碼模式的範例。

的用戶 ConnectionMultiplexer 必須處理因處置舊錯誤而可能發生的任何 ObjectDisposedException 錯誤。

通話 ForceReconnectAsync()RedisConnectionExceptionsRedisSocketExceptions。 您也可以呼叫 ForceReconnectAsync()RedisTimeoutExceptions,但前提是您使用慷慨 ReconnectMinIntervalReconnectErrorThreshold。 否則,建立新的連線可能會導致伺服器上發生串聯失敗,因為伺服器已經多載。

在 ASP.NET 應用程式中,您可以在 Microsoft.Extensions.Caching.StackExchangeRedis 套件中使用整合式實作,而不是直接使用 StackExchange.Redis 套件。 如果您在 ASP.NET 應用程式中使用 Microsoft.Extensions.Caching.StackExchangeRedis,而不是直接使用 StackExchange.Redis,您可以將 屬性設定UseForceReconnect為 true:

Microsoft.AspNetCore.Caching.StackExchangeRedis.UseForceReconnect = true

設定適當的逾時

在連線復原中,兩個逾時值很重要:連線逾時和命令逾時

連接逾時

connect timeout是用戶端等候與 Redis 伺服器建立連線的時間。 將您的用戶端連結庫設定為使用五 connect timeout 秒,讓系統有足夠的時間在較高的CPU條件下連線。

小型 connection timeout 值不保證在該時間範圍內建立連線。 如果發生問題(高用戶端 CPU、高伺服器 CPU 等等),則簡短 connection timeout 值會導致連線嘗試失敗。 這種行為往往使情況更糟。 而不是協助,較短的逾時會強制系統重新啟動嘗試重新連線的程式,進而加劇 問題,這可能會導致連線 -> 失敗 -> 重試 迴圈。

命令逾時

大部分的用戶端連結庫都有另一個逾時組態 command timeouts,也就是用戶端等候來自 Redis 伺服器的回應的時間。 雖然我們建議初始設定少於五秒,但請考慮根據您的案例和儲存在快取中的值大小來設定 command timeout 較高或更低。

command timeout如果 太小,連線看起來可能不穩定。 不過,如果 command timeout 太大,您的應用程式可能必須等候很長的時間,才能找出命令是否會逾時。

避免用戶端連線尖峰

避免在連線遺失後重新連線時同時建立許多連線。 類似於短聯機逾時可能會導致較長的中斷,同時啟動許多重新連線嘗試也可以增加伺服器負載,並延長所有用戶端成功重新連線所需的時間。

如果您要重新連線許多用戶端實例,請考慮交錯新的連線,以避免連線客戶端數目急劇增加。

注意

當您使用 StackExchange.Redis 用戶端連結庫時,請在 連接字串 中設定abortConnectfalse 。 我們建議讓句柄重新 ConnectionMultiplexer 連線。 如需詳細資訊,請參閱 StackExchange.Redis 最佳做法

避免剩下連線

快取會限制每個快取層的用戶端連線數目。 請確定當您的用戶端應用程式重新建立關閉的連線並移除舊的連線時。

進階維護通知

使用通知來瞭解即將進行的維護。 如需詳細資訊,請參閱 是否可以事先收到計劃性維護的通知。

排程維護期間

調整快取設定以容納維護。 如需建立維護期間以降低快取任何負面影響的詳細資訊,請參閱 更新通道和排程更新

復原的更多設計模式

套用復原的設計模式。 如需詳細資訊,請參閱 如何? 讓應用程式具有復原性

閒置逾時

Azure Cache for Redis 有 10 分鐘的閒置連線逾時。 10 分鐘的逾時可讓伺服器自動清除用戶端應用程式孤立的外泄連線或連線。 大部分 Redis 用戶端連結庫都有內建功能,可定期傳送 heartbeatkeepalive 命令,以防止連線關閉,即使用戶端應用程式沒有要求也一樣。

如果您的連線閑置 10 分鐘有任何風險,請將間隔設定 keepalive 為小於 10 分鐘的值。 如果您的應用程式使用沒有原生功能的 keepalive 用戶端連結庫,您可以定期傳送 PING 命令,在應用程式中實作它。