討論一下redis的過時鍵刪除機制

近來從新複習了一下redis,對redis的理解又深刻一層。redis

百度谷歌上搜到資料有一些壓根是錯的,可是卻被放在了搜索結果前幾個,感受無奈無愛! (固然我也不保證個人是全對的,畢竟不一樣角度有不一樣的見解)數據庫

參考資料書籍:Redis設計與實現 出版社:機械工業出版社。P107 ~ P111服務器

問題:若是一個鍵過時了,那麼它何時會被刪除呢?有三個答案併發

定時刪除:在設置鍵的過時時間的同時,建立一個定時器,讓定時器在過時時間來臨時,當即執行對鍵的刪除操做 .。

這種過時策略對內存友好,但對CPU是很是不友好的。由於還要主動設定定時器並主動刪除,即經過CPU換內存(CPU主動刪除了內存中的數據嘛,CPU忙,內存空閒)。能夠想象一下在大數據大併發的時候,這種機制是多麼災難大數據

惰性刪除(Lazy Expiration):redis內部不會監視記錄是否過時,可是每次從鍵空間獲取鍵時,檢查記錄是否過時。這種技術被稱爲lazy(惰性)expiration。

與定時刪除相反,此刪除機制對內存是不友好的對CPU是友好的,惰性刪除不會主動去刪除已到期(expire)的鍵,而是等有須要調用的時候再判斷,即內存換CPU(內存中有大量殘留數據)設計

按期刪除:每隔一段時間,對redis數據庫進行一次檢查,刪除裏面的過時鍵

屬於前兩種方法的折中.但要注意操做檢查執行的時間和頻率,若是刪除操做作的太頻繁,或者檢查執行的時間太長,按期策略就會退化成定時策略。code

若是檢查執行的頻率太少或者檢查執行的時間太少,就會變成和惰性策略同樣。內存

Redis服務器實際使用的是惰性刪除和按期刪除策略兩種策略,配合使用兩種策略和在使用CPU和內存找到平衡點。io

惰性刪除爲redis服務器內置策略,按期刪除在redis.conf 的hz選項,默認爲10 (即1秒執行10次,100ms一次)百度

相關文章
相關標籤/搜索