更多文章,歡迎關注微信公衆號:深夜程猿算法
LRU算法中文名叫「最近最少使用」,是一種數據緩存淘汰算法,能夠實現基於磁盤和內存的緩存淘汰數組
LRU算法根據數據的歷史使用記錄來進行數據淘汰。LRU算法認爲,最近被使用過的數據,那麼未來會更多的被使用。LRU實現數據淘汰的原理就是當數據緩存達到預設的最大值時,就會淘汰最久未被使用的數據。緩存
LRU算法適用於須要常常訪問某些熱數據,而且大部分數據都會被重複訪問的場景微信
使用數組實現LRU算法的基本過程以下:數據結構
使用單鏈表實現LRU算法基本過程以下:post
當存在熱點數據時,而且這些大部分數據仍是常常被使用的,LRU命中率較高,不須要常常進行數據的添加和刪除指針
若是隻有不多的數據被常常使用,LRU算法很低效。由於LRU命中率很低,常常須要淘汰數據。也就是「緩存污染」問題,緩存的數據並無很大程度上重複使用cdn
LRU-K算法是爲了解決LRU算法的「緩存污染」問題。能夠認爲,LRU算法就是LRU-1算法。LRU-K算法目的就是把LRU算法的「最近一次被使用」賦能爲「最近K次被使用」。隊列
LRU-K算法相比於LRU(LRU-1)算法,LRU-K算法一開始不會真正緩存數據,只有數據被使用過了K次纔會放入緩存之中。那麼,在數據沒有被真正緩存以前,數據放在哪裏的呢?如何記錄使用次數的呢?LRU-K算法會多維護一個隊列,用於保存數據的使用記錄。但隊列中的數據使用達到K次就取出來放進緩存。淘汰緩存數據和LRU(LRU-1)原理同樣,第K次使用時間最先的先淘汰。內存
雙隊列LRU算法,使用FIFO隊列和LRU隊列緩存數據。和LRU-K不一樣的是,雙隊列LRU算法兩個隊列都緩存數據,LRU-K算法只使用一個緩存隊列緩存數據,一個隊列記錄數據使用狀況
多隊列模式LRU的原理是使用多個隊列,按照數據不一樣的使用頻率來緩存數據,也就是多優先級緩存。命中的數據會逐漸從低優先級隊列緩存到高優先級隊列。高優先級隊列的數據會逐漸從淘汰到低優先級隊列,最後真正被淘汰