1. 程式人生 > 其它 >【Azure Redis 快取】當使用Azure Redis 叢集服務時候,發生了Moved的幾點分析

【Azure Redis 快取】當使用Azure Redis 叢集服務時候,發生了Moved的幾點分析

問題描述

當使用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.  當記憶體使用率較高的情況,可以參考以下幾個: