一、FIFO是簡單的隊列,先進先出。
二、LRU是最近最少使用,優先移除最久未使用的數據。是時間維度。
三、LFU是最近最不經常使用,優先移除訪問次數最少的數據。是統計維度。
FIFO是英文First In First Out 先進先出,若是緩存容量滿,則優先移出最先加入緩存的數據;其內部可使用隊列實現。
其核心思想是「若是數據最近被訪問過,那麼未來被訪問的概率也更高」。
最多見的實現是使用一個鏈表保存緩存數據算法咱們維護一個有序單鏈表,越靠近鏈表尾部的結點是越早以前訪問的。
當有一個新的數據被訪問時,咱們從鏈表頭開始順序遍歷鏈表。緩存
- 若是此數據以前已經被緩存在鏈表中了,咱們遍歷獲得這個數據對應的結點,並將其從原來的位置刪除,而後再插入到鏈表的頭部。
1.若是此時緩存未滿,則將此結點直接插入到鏈表的頭部;
2.若是此時緩存已滿,則鏈表尾結點刪除,將新的數據結點插入鏈表的頭部。
最近最不經常使用,當緩存容量滿時,移除訪問次數最少的元素,若是訪問次數相同的元素有多個,則移除最久訪問的那個。隊列
使用一個計數器來記錄key被訪問的頻率。經過使用LFU緩存算法,最低訪問數的條目首先被移除。遍歷
這個方法並不常常使用,由於老數據,有可能訪問的次數最多,而新數據次數少,這樣每次都會把最近的數據清掉,留下老數據,並且有可能老數據最近又不常使用到。