快取位於記憶體中,而記憶體的空間很有限,所以快取也有乙個能使用的最大空間,當快取中的資料超過這個最大空間時,就要使用快取淘汰策略淘汰一些資料,空出空間給其他資料使用。
最近最久未使用策略,優先淘汰最久未使用的資料,也就是上次被訪問時間距離現在最久的資料。該策略可以保證記憶體中的資料都是熱點資料,也就是經常被訪問的資料,從而保證快取命中率。
實現方式
以下是基於 雙向鍊錶 + 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 最近最久未使用演算法需要引入記憶體塊時鐘,即為每個記憶體塊設定乙個計時器,用於記錄相應記憶體塊中的頁面已經存在的時間。每次置換選出所有記憶體塊時鐘中最大者作為被置換頁面,當頁面發生置換時,將其...