一,過期刪除策略
redis數據庫鍵的過期時間都保存在過期字典中,根據系統時間和存活時間判斷是否過期。
redis有三種不同的刪除策略:
1,定時刪除:實現方式,創建定時器
2,惰性刪除:每次獲取鍵時,檢查是否過期
3,定期刪除:每隔一段時間,對數據庫進行一次檢查,刪除過期鍵,由算法決定刪除多少過期鍵和檢查多少數據庫
二,優缺點
1,定時刪除,對內存友好,但是對cpu很不友好
2,惰性刪除,對cpu友好,對內存很不友好
3,定期刪除,是兩種折中,但是,如果刪除太頻繁,將退化為定時刪除,如果刪除次數太少,將退化為惰性刪除。
三,算法
1,惰性刪除
策略由expireIfNeeded函數實現,所有讀寫命令在執行之前都會調用該函數進行檢查,鍵寫入和獲取過程如圖所示:
2,定時刪除
刪除策略由activeExpireCycle算法決定
關鍵點,遍歷數據庫,如果時間到,則終止;遍歷數據庫接着上次的進度,直到所有數據庫遍歷完,再接着遍歷;遍歷庫時候,隨機取出一定數量的隨機鍵
四,RDB和AOF時過期鍵的處理
1,RDB生成時,過期鍵會被過濾
RDB載入時,以主服務器運行,則過濾過期鍵
以從服務器運行,則忽略過期鍵,不做處理
2,AOF生成時,如果過期鍵還沒被刪除,則忽略,當被刪除以后,會追加記錄一條DEL命令
AOF載入時,過期鍵會被過濾