題目:請簡要介紹FIFO、LRU、LFU的含義和原理
含義:
FIFO:First In First Out,先進先出
LRU:Least Recently Used,最近最少使用
LFU:Least Frequently Used,最不經常使用
以上三者都是緩存過期政策。
原理和實作:
一、FIFO按照“先進先出(First In,First Out)”的原理淘汰資料,正好符合隊列的特性,資料結構上使用隊列Queue來實作。
如下圖:

1. 新通路的資料插入FIFO隊列尾部,資料在FIFO隊列中順序移動;
2. 淘汰FIFO隊列頭部的資料;
二、LRU(Least recently used,最近最少使用)算法根據資料的曆史通路記錄來進行淘汰資料,其核心思想是“如果資料最近被通路過,那麼将來被通路的幾率也更高”。
最常見的實作是使用一個連結清單儲存緩存資料,詳細算法實作如下:
1. 新資料插入到連結清單頭部;
2. 每當緩存命中(即緩存資料被通路),則将資料移到連結清單頭部;
3. 當連結清單滿的時候,将連結清單尾部的資料丢棄。
三、LFU(Least Frequently Used)算法根據資料的曆史通路頻率來淘汰資料,其核心思想是“如果資料過去被通路多次,那麼将來被通路的頻率也更高”。
LFU的每個資料塊都有一個引用計數,所有資料塊按照引用計數排序,具有相同引用計數的資料塊則按照時間排序。
具體實作如下:
1. 新加入資料插入到隊列尾部(因為引用計數為1);
2. 隊列中的資料被通路後,引用計數增加,隊列重新排序;
3. 當需要淘汰資料時,将已經排序的清單最後的資料塊删除。
注:以上圖檔摘自網絡