Mybatis(七)-- LRU LFU 算法
這篇博客主要介紹LRU LFU 算法,因為在Mybatis的緩存中會用到,所以放到這個系列中了。此外,這是我翻譯的一篇文章,覺得原文已經寫的很好了,所以就直接翻譯一下,留作知識整理。
英文原文出處如下:
https://xuri.me/2016/08/13/lru-and-lfu-cache-algorithms.html
鼓勵大家多讀讀英文的資料。好處不多說。自己體會。
在此聲明,文章只是翻譯了一個大體意思,有些詞匯翻譯的不準確,不要砸我。
最少最近使用(LRU)
丟棄掉最近期間最少使用的項目。當想要丟棄掉最近期間最少使用的項目時,算法要求必須追蹤哪些是使用了的。這種技術的廣義上的實施,要求為每個cache-line保存壽命信息,並且在壽命信息的基礎上,追蹤最近期間最少使用的cache-line。在這樣的功能實現中,每次使用一個cache-line,並改變其他cache-line的壽命信息。
P.S. 每一列可以看做是一個cache-line。
最近期間內經常使用(LRU)
asfd
最近期間內經常使用是一種用計算機管理內存的算法。關於這種方法的標準的特征是,系統追蹤在內存中,block被引用的次數。當內存滿了,需要等多的空間時,系統會去除掉最少使用次數的項目。
使用LFU算法,最簡單的方法是,為每個導入內存中的block安排計數器。每一次block被引用一次,計數器就會自動加一。當內存達到容量並且有新的block被插入時,系統將會查找使用次數最少的項目,將它從內存中除去。
LRU 和 LFU 的不同之處如下:
比如,內存容量是3,數據操作的序列如下,
set(2,2), set(1,1), get(2), get(1), get(2), set(3,3), set(4,4)
當 set(4,4)時,
LFU算法will會清除掉(3,3)
, LRU會清除掉(1,1)
.
P.S.東西很簡單,自己動手在紙上畫畫,就明白了。
Mybatis(七)-- LRU LFU 算法