Redis的記憶體回收機制
阿新 • • 發佈:2018-11-14
Redis的記憶體回收機制
2018年01月16日 17:11:48 chs007chs 閱讀數:1172Redis的記憶體回收機制主要體現在一下兩個方面:
- 刪除過期時間的鍵物件
- 刪除過期鍵物件
:多行刪除用於當客戶端讀取帶有超市屬性的鍵時,如果已經超過鍵設定的過期時間,會執行刪除操作並返回空。
2.定時任務刪除
:Redis內部維護一個定時任務,預設每秒執行10次。定時任務中刪除過期鍵邏輯採用了自適應演算法,根據鍵的過期比例,使用快慢兩種速率回收鍵,流程如下:
流程說明:
- 定時任務在每個資料庫空間隨機檢查20個鍵,當發現過期時刪除對應的鍵
- 如果超過檢查書的25%的鍵過期,迴圈執行回收邏輯知道不足25%或執行超時為止,慢模式下超時時間為25毫秒
- 如果之前回收鍵邏輯超時,則在Redis觸發內部事件之前再次以快模式執行回收過期鍵任務,快模式下超時時間為1毫秒且2秒內只能執行1次
- 快慢兩種模式內部刪除邏輯相同,只是執行的超時時間不同。
- 記憶體使用到達maxmemory上限時觸發記憶體溢位控制策略
當Redis所用記憶體打到maxmemory上限時會觸發響應的溢位控制策略,具體策略受maxmemory-policy引數控制,Redis支援6中策略,如下所示:
- noeviction:預設策略,不會刪除任何資料,拒絕所有寫入操作並返回客戶端錯誤資訊,此時Redis只響應讀操作。
- volatitle-rlu:根據LRU演算法刪除設定了超時屬性的鍵,知道騰出足夠空間為止。如果沒有可刪除的鍵物件,回退到noeviction策略。
- allkeys-lru:根據LRU演算法刪除鍵,不管資料有沒有設定超時屬性,直到騰出足夠空間為止。
- allkeys-random:隨機刪除所有鍵,知道騰出足夠空間為止。
- volatitle-random:隨機刪除過期鍵,知道騰出足夠空間為止。
- volatitle-ttl:根據鍵值物件的ttl屬性,刪除最近將要過期資料。如果沒有,回退到noeviction策略