3分鐘乾貨之redis過期鍵的刪除策略
1.定時刪除:在設定鍵的過期時間的同時,建立一個timer,讓定時器在鍵的過期時間到達時,立即執行對鍵的刪除操作。(主動刪除)
對記憶體友好,但是對cpu時間不友好,有較多過期鍵的而情況下,刪除過期鍵會佔用相當一部分cpu時間。
2.惰性刪除:放任過期鍵不管,但是每次從鍵空間中獲取鍵時,都檢查取到的鍵是否過去,如果過期就刪除,如果沒過期就返回該鍵。(被動刪除)
對cpu時間友好,程式只會在取出鍵的時候才會對鍵進行過期檢查,這不會在刪除其他無關過期鍵上花費任何cpu時間,但是如果一個鍵已經過期,而這個鍵又保留在資料庫中,那麼只要這個過期鍵不被刪除,他所佔用的記憶體就不會釋放,對記憶體不友好。
3.定期刪除:每隔一段時間就對資料庫進行一次檢查,刪除裡面的過期鍵。(主動刪除)
採用對記憶體和cpu時間折中的方法,每個一段時間執行一次刪除過期鍵操作,並通過限制操作執行的時長和頻率來減少對cpu時間的影響。難點在於,選擇一個好的策略來設定刪除操作的時長和執行頻率。