淘汰算法 LRU、LFU和FIFO


 

含義:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM