Redis 淘汰策略解讀


摘要:

      Redis 在生產環境中,采用配置參數 maxmemory 的方式來限制內存的大小。當實際存儲內存超過 maxmemory 參數值時,開發者可以通過 Redis 內存淘汰策略,來決定如何騰出新空間繼續支持讀寫工作。

工作情況

       首先,客戶端會發起需要更多內存的申請;其次,Redis 檢查內存使用情況,如果實際使用內存已經超出 maxmemory, Redis 會根據用戶配置的淘汰策略選出無用的 Key,執行淘汰任務。

淘汰策略

volatile-lru

從過期時間的數據集(server.db[i].expires)中挑選出最近最少使用的數據淘汰。沒有設置過期時間的 key 不會被淘汰,這樣就可以在增加內存空間的同時保證需要持久化的數據不會丟失。

volatile-ttl

除了淘汰機制不同,策略上基本與 volatile-lru 相似,從設置過期時間的數據集(server.db[i].expires) 中挑選將要過期的數據淘汰,ttl 值越小,越容易被淘汰。

volatile-random

從設置過期時間的數據集(server.db[i].expires) 中任意選擇數據淘汰。

allkeys-lru

從數據集(server.db[i].dict) 中挑選最近最少使用的數據淘汰,該策略要淘汰的 key 面向的是全體 Key 集合,而非過期的 Key 集合 

allkeys-random

從數據集(server.db[i].dict)中選擇任意數據淘汰。

no-enviction

禁止驅逐數據,也就是當內存不足以容納新入數據時,新寫入操作就會報錯,采用該策略可以保證數據不被丟失,也是系統默認的一種淘汰策略。

 

注意:在Redis中,LRU算法是一個近似算法,默認情況下,Redis會隨機挑選5個鍵,並從中選擇一個最久未使用的key進行淘汰。在配置文件中,按maxmemory-samples選項進行配置,選項配置越大,消耗時間就越長,但結構也就越精准。

 

參考資料:

https://stor.51cto.com/art/201904/594773.htm

https://wiki.jikexueyuan.com/project/redis/data-elimination-mechanism.html

 


免責聲明!

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



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