1. 程式人生 > >Redis快取淘汰策略

Redis快取淘汰策略

為什麼會有淘汰?

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提供的淘汰策略

  1. noeviction:達到記憶體限額後返回錯誤,客戶嘗試可以導致更多記憶體使用的命令(大部分寫命令,但DEL和一些例外)
  2. allkeys-lru:為了給新增加的資料騰出空間,驅逐鍵先試圖移除一部分最近使用較少的(LRC)。
  3. volatile-lru:為了給新增加的資料騰出空間,驅逐鍵先試圖移除一部分最近使用較少的(LRC),但只限於過期設定鍵。
  4. allkeys-random: 為了給新增加的資料騰出空間,驅逐任意鍵
  5. volatile-random: 為了給新增加的資料騰出空間,驅逐任意鍵,但只限於有過期設定的驅逐鍵。
  6. volatile-ttl: 為了給新增加的資料騰出空間,驅逐鍵只有祕鑰過期設定,並且首先嚐試縮短存活時間的驅逐鍵