含義:
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. 當需要淘汰數據時,將已經排序的列表最后的數據塊刪除。
