快取更新演算法LRU

2022-07-11 11:30:12 字數 651 閱讀 5531

目錄lru演算法的設計原則是:如果乙個資料在最近一段時間沒有被訪問到,那麼在將來它被訪問的可能性也很小。也就是說,當限定的空間已存滿資料時,應當把最久沒有被訪問到的資料淘汰。

1.用乙個陣列來儲存資料,給每乙個資料項標記乙個訪問時間戳,每次插入新資料項的時候,先把陣列中存在的資料項的時間戳自增,並將新資料項的時間戳置為0並插入到陣列中。每次訪問陣列中的資料項的時候,將被訪問的資料項的時間戳置為0。當陣列空間已滿時,將時間戳最大的資料項淘汰。

2.利用乙個鍊錶來實現,每次新插入資料的時候將新資料插到鍊錶的頭部;每次快取命中(即資料被訪問),則將資料移到鍊錶頭部;那麼當鍊表滿的時候,就將鍊錶尾部的資料丟棄。

3.利用鍊錶和hashmap。當需要插入新的資料項的時候,如果新資料項在鍊錶中存在(一般稱為命中),則把該節點移到鍊錶頭部,如果不存在,則新建乙個節點,放到鍊錶頭部,若快取滿了,則把鍊錶最後乙個節點刪除即可。在訪問資料的時候,如果資料項在鍊錶中存在,則把該節點移到鍊錶頭部,否則返回-1。這樣一來在鍊錶尾部的節點就是最近最久未訪問的資料項。

對於第一種方法,需要不停地維護資料項的訪問時間戳,另外,在插入資料、刪除資料以及訪問資料時,時間複雜度都是o(n)。對於第二種方法,鍊錶在定位資料的時候時間複雜度為o(n)。所以在一般使用第三種方式來是實現lru演算法。

本文採用鍊錶和hashmap的方式來實現lru

LRU快取演算法

為什麼要有lru快取演算法 我們用快取來存放以前讀取的資料,而不是直接丟掉,這樣,再次讀取的時候,可以直接在快取裡面取,而不用再重新查詢一遍,這樣系統的反應能力會有很大提高。但是,當我們讀取的個數特別大的時候,我們不可能把所有已經讀取的資料都放在快取裡,畢竟記憶體大小是一定的,我們一般把最近常讀取的...

LRU演算法 快取演算法

lru演算法主要用於快取演算法,在節省資源的情況下提高資料訪問效率 篩選熱點資料 對不斷訪問的資料進行篩選淘汰,剩下的資料就為熱點資料 相對而言,釋放最近未被訪問資料占用的空間也是採用lru演算法。1 lru的實現 鍊錶 使用乙個鍊錶儲存快取資料 1 新資料插入到鍊錶頭部 2 每當快取命中 即快取資...

快取淘汰演算法 LRU

1.lru 1.1.原理 lru least recently used,最近最少使用 演算法根據資料的歷史訪問記錄來進行淘汰資料,其核心思想是 如果資料最近被訪問過,那麼將來被訪問的機率也更高 1.2.實現 最常見的實現是使用乙個鍊錶儲存快取資料,詳細演算法實現如下 1.新資料插入到鍊錶頭部 2....