三種緩存淘汰算法(LFU、LRU、FIFO)

三種緩存淘汰算法(LFU、LRU、FIFO)

一、FIFO是簡單的隊列,先進先出。
二、LRU是最近最少使用,優先移除最久未使用的數據。是時間維度。
三、LFU是最近最不經常使用,優先移除訪問次數最少的數據。是統計維度。

先進先出算法FIFO

FIFO是英文First In First Out 先進先出,若是緩存容量滿,則優先移出最先加入緩存的數據;其內部可使用隊列實現。

最少使用LRU

其核心思想是「若是數據最近被訪問過,那麼未來被訪問的概率也更高」。
最多見的實現是使用一個鏈表保存緩存數據算法

咱們維護一個有序單鏈表,越靠近鏈表尾部的結點是越早以前訪問的。
當有一個新的數據被訪問時,咱們從鏈表頭開始順序遍歷鏈表。緩存

  1. 若是此數據以前已經被緩存在鏈表中了,咱們遍歷獲得這個數據對應的結點,並將其從原來的位置刪除,而後再插入到鏈表的頭部。
  1. 若是此數據沒有在緩存鏈表中,又能夠分爲兩種狀況:
1.若是此時緩存未滿,則將此結點直接插入到鏈表的頭部;
2.若是此時緩存已滿,則鏈表尾結點刪除,將新的數據結點插入鏈表的頭部。

最不經常使用LFU

最近最不經常使用,當緩存容量滿時,移除訪問次數最少的元素,若是訪問次數相同的元素有多個,則移除最久訪問的那個。隊列

使用一個計數器來記錄key被訪問的頻率。經過使用LFU緩存算法,最低訪問數的條目首先被移除。遍歷

這個方法並不常常使用,由於老數據,有可能訪問的次數最多,而新數據次數少,這樣每次都會把最近的數據清掉,留下老數據,並且有可能老數據最近又不常使用到。
相關文章
相關標籤/搜索