過期策略

redis會將每個設置了過期時間的key放入到一個獨立的字典中,以後會定時遍歷這個字典來刪除到期的 key。除了定時遍歷之外,它還會使用惰性策略來刪除過期的key,所謂惰性策略就是在客戶端訪問這個key的時候,redis對key的過期時間進行檢查,如果過期了就立即刪除。定時刪除是集中處理,惰性刪除是零散處理。

問題1:定時刪除是如何工作的?

答:Redis默認會每秒進行十次過期掃描,過期掃描不會遍歷過期字典中所有的key:

1、從過期字典中隨機20個key;

2、刪除這20個key中已經過期的key;

3、如果過期的key比率超過1/4,那就重複步驟 1;

同時,爲了保證過期掃描不會出現循環過度,導致線程卡死現象,算法還增加了掃描時間的上限,默認不會超過 25ms。

所以業務開發人員一定要注意過期時間,如果有大批量的 key 過期,要給過期時間設置一個隨機範圍,而不能全部在同一時間過期。

注意事項

從庫不會進行過期掃描,從庫對過期的處理是被動的。主庫在 key到期時,會在AOF文件裏增加一條del指令,同步到所有的從庫,從庫通過執行這條del指令來刪除過期的 key。

因爲指令同步是異步進行的,所以主庫過期的key的del指令沒有及時同步到從庫的話,會出現主從數據的不一致,主庫沒有的數據在從庫裏還存在。

發佈了167 篇原創文章 · 獲贊 10 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章