基于Java实现缓存Cache的深入分析
发布时间:2020-12-14 05:20:52 所属栏目:Java 来源:网络整理
导读:原理是使用LinkedHashMap来实现,当缓存超过大小时,将会删除最老的一个元组。 实现代码如下所示 复制代码 代码如下: import java.util.LinkedHashMap; import java.util.Map; public class LRUCache { public static class CachedData { private Object data
原理是使用LinkedHashMap来实现,当缓存超过大小时,将会删除最老的一个元组。 实现代码如下所示 复制代码 代码如下: 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(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |