日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 最少使用(lru)置换算法_缓存置换算法 - LRU算法

發布時間:2024/9/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 最少使用(lru)置换算法_缓存置换算法 - LRU算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LRU算法

1 原理

對于在內存中并且不被使用的數據塊就是LRU,這類數據需要從內存中刪除,以騰出空間來存儲常用的數據。

LRU算法(Least Recently Used,最近最少使用),是內存管理的一種頁面置換算法,就是用來刪除內存中不被使用的數據,騰出空間來把常用的數據存進去。

LRU算法的實現原理:把所有的緩存數據存入鏈表中,新插入的或被訪問的數據存入鏈表頭,如果鏈表滿了,就把尾部的數據清除。如下圖所示:

比如長度是5,緩存中的數據是:1,2,3,4,5

訪問了2,那么緩存中的數據順序變為:2,1,3,4,5

新插入了6,會變為:6,2,1,3,4

2 Java編碼實現

2.1 基于linkedhashmap實現

linkedhashmap的底層實現是鏈表,使用linkedhashmap實現LRU算法的關鍵在于設置鏈表的長度,代碼如下所示:

2.2 鏈表實現

可以自己維護一個鏈表,來實現LRU算法,但是這種方式的弊端是查詢、插入的效率比較慢,代碼實現如下所示:

2.3 鏈表+HashTable實現

解決自己維護鏈表,插入、查詢慢的問題,可以使用鏈表+HashTable來實現LRU算法,代碼如下所示:

LRU算法的演變

LRU-K算法

LRU算法的弊端是會產生“緩存污染”,比如周期性訪問的數據。為了解決這個問題,我們引入LRU-K算法。舉個例子,需要查詢的數據特別頻繁,我們從redis或者數據庫中拉取數據比較慢可以放在jvm緩存中,如下圖所示:

滿足條件的數據放在LRU隊列中,應用程序第一次拉取數據從LRU隊列中來拿,如果沒有再從歷史隊列中拿,如果還拿不到就從redis中拿,并把拿到的數據放入歷史隊列中,歷史隊列的數據滿足一定條件就放入LRU隊列中


作者:生命—在繼續

原文:CSDN

總結

以上是生活随笔為你收集整理的java 最少使用(lru)置换算法_缓存置换算法 - LRU算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。