基于Java實現(xiàn)緩存Cache的深入分析
更新時間:2013年06月04日 11:58:32 作者:
本篇文章是對Java實現(xiàn)緩存Cache進行了詳細的分析介紹,需要的朋友參考下
原理是使用LinkedHashMap來實現(xiàn),當緩存超過大小時,將會刪除最老的一個元組。
實現(xiàn)代碼如下所示
import java.util.LinkedHashMap;
import java.util.Map;
public class LRUCache {
public static class CachedData {
private Object data = null;
private long time = 0;
private boolean refreshing = false;
public CachedData(Object data) {
this.data = data;
this.time = System.currentTimeMillis();
}
public Object getData() {
return data;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public boolean getRefreshing() {
return refreshing;
}
public void setRefreshing(boolean b) {
this.refreshing = b;
}
}
protected static class CacheMap extends LinkedHashMap {
protected int maxsize = 0;
public CacheMap(int maxsize) {
super(maxsize * 4 / 3 + 1, 0.75f, true);
this.maxsize = maxsize;
}
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > this.maxsize;
}
}
protected CacheMap map = null;
public LRUCache(int size) {
this.map = new CacheMap(size);
}
public synchronized void set(Object key, Object value) {
map.remove(key);
map.put(key, new CachedData(value));
}
public synchronized void remove(Object key) {
map.remove(key);
}
public synchronized CachedData get(Object key) {
CachedData value = (CachedData) map.get(key);
if (value == null) {
return null;
}
map.remove(key);
map.put(key, value);
return value;
}
public int usage() {
return map.size();
}
public int capacity() {
return map.maxsize;
}
public void clear() {
map.clear();
}
}
實現(xiàn)代碼如下所示
復制代碼 代碼如下:
import java.util.LinkedHashMap;
import java.util.Map;
public class LRUCache {
public static class CachedData {
private Object data = null;
private long time = 0;
private boolean refreshing = false;
public CachedData(Object data) {
this.data = data;
this.time = System.currentTimeMillis();
}
public Object getData() {
return data;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public boolean getRefreshing() {
return refreshing;
}
public void setRefreshing(boolean b) {
this.refreshing = b;
}
}
protected static class CacheMap extends LinkedHashMap {
protected int maxsize = 0;
public CacheMap(int maxsize) {
super(maxsize * 4 / 3 + 1, 0.75f, true);
this.maxsize = maxsize;
}
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > this.maxsize;
}
}
protected CacheMap map = null;
public LRUCache(int size) {
this.map = new CacheMap(size);
}
public synchronized void set(Object key, Object value) {
map.remove(key);
map.put(key, new CachedData(value));
}
public synchronized void remove(Object key) {
map.remove(key);
}
public synchronized CachedData get(Object key) {
CachedData value = (CachedData) map.get(key);
if (value == null) {
return null;
}
map.remove(key);
map.put(key, value);
return value;
}
public int usage() {
return map.size();
}
public int capacity() {
return map.maxsize;
}
public void clear() {
map.clear();
}
}
您可能感興趣的文章:
相關(guān)文章
JavaSE的三大接口:Comparator,Comparable和Cloneable詳解
這篇文章主要介紹了詳解JavaSE中Comparator,Comparable和Cloneable接口的區(qū)別的相關(guān)資料,希望通過本文大家能徹底掌握這部分內(nèi)容,需要的朋友可以參考下2021-10-10Java多線程之readwritelock讀寫分離的實現(xiàn)代碼
這篇文章主要介紹了Java多線程之readwritelock讀寫分離的相關(guān)內(nèi)容,文中涉及具體實例代碼,具有一定參考價值,需要的朋友可以了解下。2017-10-10Java Swing JToggleButton開關(guān)按鈕的實現(xiàn)
這篇文章主要介紹了Java Swing JToggleButton開關(guān)按鈕的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12Java @Async注解導致spring啟動失敗解決方案詳解
這篇文章主要介紹了Java @Async注解導致spring啟動失敗解決方案詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08ElasticSearch學習之文檔API相關(guān)操作
這篇文章主要為大家介紹了ElasticSearch學習之文檔API相關(guān)操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01Springboot使用Logback實現(xiàn)日志配置與異常記錄
默認情況下,SpringBoot內(nèi)部使用logback作為系統(tǒng)日志實現(xiàn)的框架,將日志輸出到控制臺,不會寫到日志文件。本篇文章主要講解下如何自定義logabck.xml以及對logback文件中配置做一個詳解,需要的可以參考一下2022-11-11關(guān)于SpringGateway調(diào)用服務(wù) 接受不到參數(shù)問題
這篇文章主要介紹了關(guān)于SpringGateway調(diào)用服務(wù)接受不到參數(shù)問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12