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會直接報錯,因為無法刪除任何資料以騰出記憶體空間。