在開發過程當中,在獲取REDIS過期KEY所產生的回調通知中遇到這麼一個問題:配置文件定期刪除頻率設置的20HZ,但實際接收到expire通知還是晚了十幾秒,但如果向其發出get請求,expire通知可以立即到達
分析:惰性刪除正常執行,而預想的expire定期刪除策略沒有正常執行
由於目前環境中REDIS裏有4000多個帶有TTL的KEY,僅有個位數的KEY需要通知回調,按該文所說刪KEY採用的是限定時間隨機採樣刪除法,因此每次循環會有概率採不到將需要產生通知的KEY
解決方法:
1.在後臺定時執行keys * ,在KEY數不多時可以這樣處理
2.更改REDIS源代碼,採樣時按TTL升序採樣,提高已經過期KEY被採到的概率
3.調整刪除策略爲定時刪除策略,但這樣CPU定時器的開銷會增大
4.從業務角度出發,將能設置爲不帶TTL的KEY儘量設置爲不帶TTL
5.業務上不是所有帶TTL的KEY都需要通知回調,可以將需要監視的過期KEY換到單獨的db中