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