【Azure Redis 快取】當使用Azure Redis 叢集服務時候,發生了Moved的幾點分析
阿新 • • 發佈:2022-03-08
問題描述
當使用Azure Redis 叢集服務時候,發生了Moved的幾點分析
問題分析
1. 關於 Moved 問題,原因有可能是記憶體碎片整理,從而引起Redis發生failover。
2. 記憶體碎片多數情況是由於key值較大導致的,同時記憶體使用率較高也會影響記憶體碎片,從可以根據Redis的Memory指標判斷(Used memory RSS比Used memory高不少),由於記憶體碎片會降低Redis的可用性以及Redis本身記憶體的不足,所以服務端會在碎片率較大的時候選擇整理,該動作會導致failover,而此時客戶端就會有moved的報錯,原因在於切換前的master被關閉,發生failover。
3. 在Redis進行縮放操作(scale out) 期間,客戶端也會出現Moved異常。
4. 關於timeout,可以從慢指令(slowlog)中發現執行超時的均為eval執行lua指令碼時超時。執行eval通常是在事務中執行,且從堆疊上看出執行了exists命令,目的是否是為了加分散式鎖呢?由於這個命令時間複雜度為O(N),所以建議使用 SCAN 代替該操作。
5. 當記憶體使用率較高的情況,可以參考以下幾個:
- 減小redis中儲存的值的大小,文件中建議在100kb以下:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-best-practices-memory-management#configure-your-maxmemory-reserved-setting