Redis快取淘汰策略
阿新 • • 發佈:2019-01-25
為什麼會有淘汰?
Redis可以看作是一個記憶體資料庫,可以通過Maxmemory指令配置Redis的資料集使用指定量的記憶體。設定maxmemory為0,則表示無限制(這是64位系統的預設行為,而32位系統使用3GB內隱記憶極限)。
maxmemory 100mb
當記憶體使用達到maxmemory極限時,需要使用某種淘汰演算法來決定清理掉哪些資料,以保證新資料的存入。
常用的淘汰演算法:
- FIFO:First In First Out,先進先出。判斷被儲存的時間,離目前最遠的資料優先被淘汰。
- LRU:Least Recently Used,最近最少使用。判斷最近被使用的時間,目前最遠的資料優先被淘汰。
- LFU:Least Frequently Used,最不經常使用。在一段時間內,資料被使用次數最少的,優先被淘汰。
Redis提供的淘汰策略:
- noeviction:達到記憶體限額後返回錯誤,客戶嘗試可以導致更多記憶體使用的命令(大部分寫命令,但DEL和一些例外)
- allkeys-lru:為了給新增加的資料騰出空間,驅逐鍵先試圖移除一部分最近使用較少的(LRC)。
- volatile-lru:為了給新增加的資料騰出空間,驅逐鍵先試圖移除一部分最近使用較少的(LRC),但只限於過期設定鍵。
- allkeys-random: 為了給新增加的資料騰出空間,驅逐任意鍵
- volatile-random: 為了給新增加的資料騰出空間,驅逐任意鍵,但只限於有過期設定的驅逐鍵。
- volatile-ttl: 為了給新增加的資料騰出空間,驅逐鍵只有祕鑰過期設定,並且首先嚐試縮短存活時間的驅逐鍵