redis過期策略有哪些?內存淘汰機制有哪些?

前言

  小鹹兒的項目中使用redis來做緩存,從而減輕數據庫的壓力,但是redis中的key和數據過期後,爲什麼內存空間還沒有釋放呢?如果內存空間將要滿的時候該怎麼辦呢?接下來小鹹兒就來解釋一下該如何解決這兩個問題。


過期策略:定期刪除+惰性刪除

redis中的key和數據過期後,爲什麼內存空間還沒有釋放呢?

  既然提到redis的過期策略,那麼該如何解決這個問題就有點苗頭了。先來一張統領全局的圖

在這裏插入圖片描述

定期刪除

  redis默認每隔100ms就隨機抽取一些設置了過期時間的key,檢查其是否過期,如果過期就刪除。

  問題:因爲是隨機抽取,定期刪除可能導致很多過期key到了時間並沒有被刪除掉,這時候該怎麼辦呢?惰性刪除該上場了。

惰性刪除

  在你獲取某個key時,redis會檢查一下,是否設置了過期時間?設置了過期時間是否過期了?如果過期了就刪除,不會給你返回任何東西。

  問題:實際上,這仍然有問題:比如定期刪除漏掉了很多過期key,然後也沒及時查詢,也就沒走惰性刪除,這時就會有大量過期的key堆積在內存中,導致redis內存快耗盡了,怎麼辦?

    


如果內存空間將要滿的時候該怎麼辦呢?

  出現這種情況,就應該淘汰策略上場了,淘汰策略從設置過期時間中的key和從所有的key方面分爲兩類。

設置過期時間的key中

  ▪ volatile-lru:設置了過期時間的鍵空間中,移除最近最少未使用的key。
  ▪ volatile-ttl:設置了過期時間的鍵空間中,移除即將過期的key。
  ▪ volatile-random:設置了過期時間的鍵空間中,隨機移除某個key

所有的key中

  ▪ noeviction:永不過期,不淘汰,寫入新數據時,會報錯
  ▪ 鍵空間中,移除最近最少未使用的key。
  ▪ allkeys-random:鍵空間中,隨機移除某個key


黑色背景

小結

  有關redis的內容,不僅要知其然還有知其所以然。

感謝您的閱讀~~

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