Redis的內存回收機制


Redis的內存回收機制

Redis的內存回收機制主要體現在一下兩個方面:

  • 刪除過期時間的鍵對象
  1.  刪除過期鍵對象

         :多行刪除用於當客戶端讀取帶有超市屬性的鍵時,如果已經超過鍵設置的過期時間,會執行刪除操作並返回空。

     2.定時任務刪除

           :Redis內部維護一個定時任務,默認每秒運行10次。定時任務中刪除過期鍵邏輯采用了自適應算法,根據鍵的過期比例,使用快慢兩種速率回收鍵,流程如下:

流程說明:

  1. 定時任務在每個數據庫空間隨機檢查20個鍵,當發現過期時刪除對應的鍵
  2. 如果超過檢查書的25%的鍵過期,循環執行回收邏輯知道不足25%或運行超時為止,慢模式下超時時間為25毫秒
  3. 如果之前回收鍵邏輯超時,則在Redis觸發內部事件之前再次以快模式運行回收過期鍵任務,快模式下超時時間為1毫秒且2秒內只能運行1次
  4. 快慢兩種模式內部刪除邏輯相同,只是執行的超時時間不同。
  • 內存使用到達maxmemory上限時觸發內存溢出控制策略​​​​​​

 當Redis所用內存打到maxmemory上限時會觸發響應的溢出控制策略,具體策略受maxmemory-policy參數控制,Redis支持6中策略,如下所示:

  1. noeviction:默認策略,不會刪除任何數據,拒絕所有寫入操作並返回客戶端錯誤信息,此時Redis只響應讀操作。
  2. volatitle-rlu:根據LRU算法刪除設置了超時屬性的鍵,知道騰出足夠空間為止。如果沒有可刪除的鍵對象,回退到noeviction策略。
  3. allkeys-lru:根據LRU算法刪除鍵,不管數據有沒有設置超時屬性,直到騰出足夠空間為止。
  4. allkeys-random:隨機刪除所有鍵,知道騰出足夠空間為止。
  5. volatitle-random:隨機刪除過期鍵,知道騰出足夠空間為止。
  6. volatitle-ttl:根據鍵值對象的ttl屬性,刪除最近將要過期數據。如果沒有,回退到noeviction策略


免責聲明!

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



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