Redis淘汰策略

worshipone發表於2024-04-26

Redis過期策略有幾種?

Redis中提供八種過期策略,預設是noeviction,即不刪除任何資料,當記憶體不足時會直接報錯。可以在Redis的配置檔案中進行設定。

  • noeviction:不淘汰任何key,但是記憶體滿時不允許寫入新資料,預設就是這種策略。
  • volatile-ttl: 對設定了TTL的key,比較key的剩餘TTL值,TTL越小越先被淘汰。
  • allkeys-random:對全體key隨機進行淘汰。
  • volatile-random:對設定了TTL的key,隨機進行淘汰。
  • allkeys-lru:對全體key,基於LRU演算法進行淘汰。
  • volatile-lru:對設定了TTL的key,基於LRU演算法進行淘汰。
  • allkeys-lfu:對全體key,基於LFU演算法進行淘汰。
  • volatile-lfu:對設定了TTL的key,基於LFU演算法進行淘汰。
    這裡面有兩個非常重要的概念,一個是LRU,另外一個是LFU。LRU的意思是最近最少使用,透過當前時間減去最後一次訪問時間來計算一個值,該值越大,則淘汰優先順序越高。LFU的意思是最少頻率使用,它會統計每個key的訪問頻率,值越小,則淘汰優先順序越高。
    在專案中,我們可以設定為allkeys-lru,即挑選最近最少使用的資料進行淘汰,這樣可以保留一些經常訪問的key在Redis中。
    如果專案中涉及到置頂操作,可以設定為volatile-lru,置頂的快取資料不指定過期時間。

如果資料庫有1000萬條資料,而Redis只能快取20萬條資料,如何保證Redis中都是熱點資料?

可以使用allkeys-lru(挑選最近最少使用的資料淘汰)淘汰策略,這樣留下來的都是經常訪問的熱點資料。

當Redis的記憶體用完了會發生什麼?

主要取決於資料淘汰策略。如果是預設的配置(noeviction),Redis會直接報錯,因為無法刪除任何資料以騰出記憶體空間。

相關文章