Redis過期key的清除策略


Redis如何淘汰過期的keys: set name wx 3600

惰性刪除

概念:當一些客戶端嘗試訪問它時,key會被發現並主動的過期

放任鍵過期不管,但是每次從鍵空間中獲取鍵時,都檢查取得的鍵是否過期,如果過期的話,就刪除該鍵

特點:CPU友好,但如果一個key不再使用,那么它會一直存在於內存中,造成浪費

定時刪除

概念:設置鍵的過期時間的同時,創建一個定時器(timer),讓定時器在鍵的過期時間來臨時,立即執行對鍵的刪除操作 

定期刪除

隔一段時間,程序就對數據庫進行一次檢查,刪除里面的過期鍵,至於要刪除多少過期鍵,

以及要檢查多少個數據庫,則由算法決定。 即設置一個定時任務,比如10分鍾刪除一次過期的key;間隔小則占用CPU,間隔大則浪費內存

例如Redis每秒處理:

1. 測試隨機的20個keys進行相關過期檢測。
2. 刪除所有已經過期的keys。
3. 如果有多於25%的keys過期,重復步奏1.

Redis服務器實際使用的是惰性刪除和定期刪除兩種策略:通過配合使用這兩種刪除策略,服務器可以很好地在合理使用CPU時間和避免浪費內存空間之間取得平衡。

惰性刪除策略是怎么實現?通過expireIfNeeded函數,當我們操作key的時候進行判斷key是否過期

定期刪除策略是怎么實現的?通過activeExpireCycle函數,serverCron函數執行時,activeExpireCycle函數就會被調用,規定的時間里面分多次遍歷服務器的expires字典隨機檢查一部分key的過期時間,並刪除其中的過期key


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM