基于Java实现缓存Cache的深入分析
时间:2023-08-15 20:53:59
原理是使用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();
}
}
标签:Java,cache,缓存
0
投稿
猜你喜欢
C#中async和await的深入分析
2023-09-14 17:11:20
C#中使用IFormattable实现自定义格式化字符串输出示例
2023-05-31 23:34:04
Kotlin中空判断处理操作实例
2023-01-16 00:45:19
详解idea从git上拉取maven项目详细步骤
2023-04-23 08:51:56
Android中方法数超限问题与启动优化详解
2023-03-05 17:55:41
C#实现飞行棋(Winform)
2023-08-07 07:08:55
springboot整合shardingsphere和seata实现分布式事务的实践
2021-08-10 04:28:37
android开发教程之自定义控件checkbox的样式示例
2023-10-23 13:33:55
详解Java8如何使用Lambda表达式进行比较
2023-12-09 19:27:16
Java实现的质因数分解操作示例【基于递归算法】
2023-08-19 03:22:12
Springboot+WebSocket实现一对一聊天和公告的示例代码
2022-06-16 11:32:33
C#使用默认浏览器打开网页的方法
2022-02-16 10:39:34
Android Studio中统一管理版本号引用配置问题
2023-03-06 04:23:54
Java编码摘要算法实例解析
2022-07-21 23:33:29
浅谈C# winForm 窗体闪烁的问题
2023-06-10 09:46:07
Mybatis中的延迟加载案例解析
2023-02-27 01:55:37
C#中try...catch的使用与常见面试题分享
2022-10-22 16:30:35
java使用RandomAccessFile类基于指针读写文件实例代码
2021-07-29 17:45:45
java中URLEncoder.encode与URLDecoder.decode处理url特殊参数的方法
2022-05-22 05:32:00
java实现Xml与json之间的相互转换操作示例
2023-06-21 13:30:39