關於Redis會回收超時key的存儲空間的問題?

這裏有一個問題需要討論:如果key超時了,Redis會回收key的存儲空間嗎?

答案是不會。Redis的key超時不會被其自動回收,它只會標識哪些鍵值對超時了。
這樣做的一個好處在於,如果一個很大的鍵值對超時,比如一個列表或者哈希結構,存在數以百萬個元素,要對其回收需要很長的時間。如果採用超時回收,則可能產生停頓。壞處也很明顯,這些超時的鍵值對會浪費比較多的空間。

Redis提供兩個方式回收這些超時鍵值對,他們是定時回收惰性回收

  • 定時回收是指在確定的某個時間觸發一段代碼,回收超時的鍵值對
  • 惰性回收則是當一個超時的鍵,被再次用get命令訪問時,將觸發Redis將其從內存中清空

定時回收可以完全回收那些超時的鍵值對,但是缺點也很明顯,如果這些鍵值對比較多,則Redis需要運行較長的時間,從而導致停頓。所以系統設計者一般會選擇在沒有業務發生的時刻觸發Redis的定時回收,以便清理超時的鍵值對。

對於惰性回收而言,它的優勢是可以指定回收超時的鍵值對,它的缺點是要執行一個莫名其妙的get操作,或者在某些時候,我們也難以判斷哪些鍵值對已經超時。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章