手写一个cache工具
Show/provied your value when you’re with awesome people.
talk is cheap, show me the code,make a better result.
目录
概述
缓存的作用不言而喻,缓存可以极大提高对数据的访问效率,因为避免了每次请求都对数据库进行操作。
需求:
需求整理如下:
1.基本的put,get
2.性能指标
设计思路
因为缓存很简单,下次直接给出类图设计关系了。
实现思路分析
1.数据结构模拟
这里我们选用linkList的方法,增加的方法。删除的方法。
2…LRU管理
队列的增删改
3.put/get操作
提供一个put/get方法
4.超时时间控制
提供一个超时时间控制,缓存清除等机制
拓展Demo实现
相关代码如下:
1.put 操作
/**
*
* @param key
* @param value
*/
public static void put(String key, Object value) {
INSTANCE.put(key, value);
LocalCache.streamInstance();
}
/**
*
* @param key
* @param value
* @param outSecond 保存时间(秒),超出时间,被清除
*/
public static void put(String key, Object value, int outSecond) {
INSTANCE.put(key, value);
KEY_TIME_INSTANCE.put(key,
Long.parseLong(LocalDateTime.now().plusSeconds(outSecond).format(yyyyMMddHHmmss_FMT)));
LocalCache.streamInstance();
}
/**
*
* @param key
* @param value
* @return
*/
public static Object putIfAbsent(String key, Object value) {
Object result = null;
result = INSTANCE.putIfAbsent(key, value);
LocalCache.streamInstance();
return result;
}
2.get操作:
/**
* 获取缓存
*
* @param id
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T get(String key) {
T value = (T) INSTANCE.get(key);
if (value == null) {
return null;
}
if (LocalCache.isTimeOut(key)) {
INSTANCE.remove(key);
KEY_TIME_INSTANCE.remove(key);
return null;
} else {
return value;
}
}
实验效果:
略
分析:
略
小结:
主要讲述了缓存cache关原理和简单实现,里面有许多不足,请大家指正~
参考资料和推荐阅读
欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~