快取淘汰策略 最近最久未使用策略(LRU)

2021-09-29 16:54:51 字數 983 閱讀 5318

快取位於記憶體中,而記憶體的空間很有限,所以快取也有乙個能使用的最大空間,當快取中的資料超過這個最大空間時,就要使用快取淘汰策略淘汰一些資料,空出空間給其他資料使用。

最近最久未使用策略,優先淘汰最久未使用的資料,也就是上次被訪問時間距離現在最久的資料。該策略可以保證記憶體中的資料都是熱點資料,也就是經常被訪問的資料,從而保證快取命中率。

實現方式

以下是基於 雙向鍊錶 + hashmap 的 lru 演算法實現,對演算法的解釋如下:

public

class

lruimplements

iterable

}public

lru(

int maxsize)

public v get

(k key)

node node = map.

get(key)

;unlink

(node)

;(node)

;return node.v;

}public

void

put(k key, v value)

node node =

newnode

(key, value)

; map.

put(key, node)

;(node);if

(map.

size()

> maxsize)

}private

void

unlink

(node node)

private

void

(node node)

private node removetail()

@override

public iterator

iterator()

@override

public k next()

};}}

最近最久未使用

最近最久未使用 lru 的頁面置換演算法是根據頁面調入記憶體後的使用情況做出決策的。由於無法 各頁面將來的使用情況,只能利用 最近的過去 作為 最近的將來 的近似,因此,lru置換演算法是選擇最近最久未使用的頁面予以淘汰。該演算法賦予每個頁面乙個訪問字段,用來記錄乙個頁面自上次被訪問以來所經歷的時間...

Redis快取淘汰策略

在使用redis時,我們一般會為redis的快取空間設定乙個大小,不會讓資料無限制的放入redis快取。對於 redis 來說,一旦確定了快取最大容量,比如 4gb,你就可以使用下面這個命令來設定快取的大小了 config set maxmemory 4gb redis設定了快取的容量大小,那麼快取...

LRU最近最久未使用演算法

標籤 演算法 作業系統 舉報 作業系統知識庫 c 21 作者同類文章x 作業系統學習 11 作者同類文章x 最近最久未使用演算法需要引入記憶體塊時鐘,即為每個記憶體塊設定乙個計時器,用於記錄相應記憶體塊中的頁面已經存在的時間。每次置換選出所有記憶體塊時鐘中最大者作為被置換頁面,當頁面發生置換時,將其...