FIFO、LRU、LFU的含義和原理

 

含義: 算法

FIFO:First In First Out,先進先出
LRU:Least Recently Used,最近最少使用緩存

LFU:Least Frequently Used,最不常常使用數據結構

以上三者都是緩存過時策略。.net

 

原理和實現: 排序

 

1、FIFO按照「先進先出(First In,First Out)」的原理淘汰數據,正好符合隊列的特性,數據結構上使用隊列Queue來實現。隊列

以下圖:get

1. 新訪問的數據插入FIFO隊列尾部,數據在FIFO隊列中順序移動;it

2. 淘汰FIFO隊列頭部的數據;ast

 

2、LRU(Least recently used,最近最少使用)算法根據數據的歷史訪問記錄來進行淘汰數據,其核心思想是「若是數據最近被訪問過,那麼未來被訪問的概率也更高」。class

最多見的實現是使用一個鏈表保存緩存數據,詳細算法實現以下:

1. 新數據插入到鏈表頭部;

2. 每當緩存命中(即緩存數據被訪問),則將數據移到鏈表頭部;

3. 當鏈表滿的時候,將鏈表尾部的數據丟棄。

 

3、LFU(Least Frequently Used)算法根據數據的歷史訪問頻率來淘汰數據,其核心思想是「若是數據過去被訪問屢次,那麼未來被訪問的頻率也更高」。

LFU的每一個數據塊都有一個引用計數,全部數據塊按照引用計數排序,具備相同引用計數的數據塊則按照時間排序。

具體實現以下:

 

1. 新加入數據插入到隊列尾部(由於引用計數爲1);

2. 隊列中的數據被訪問後,引用計數增長,隊列從新排序;

3. 當須要淘汰數據時,將已經排序的列表最後的數據塊刪除。

相關文章
相關標籤/搜索