1. 程式人生 > >Mybatis(七)-- LRU LFU 算法

Mybatis(七)-- LRU LFU 算法

fan str fancybox 系統 多說 lock 最簡 block 聲明

這篇博客主要介紹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 算法