自己动手写工具(一)一个用Java8实现的内存级别的缓存
2016-11-18 17:44
525 查看
有的时候需要用因为效率问题需要使用一些最底层的代码开发,免不了部分地方又要采用高级一点的功能,因此,此时需要自己动手实现一部分逻辑,此处使用map做内存级别的缓存,类似hibernate里面的一级缓存。此处的实现不只是可以在数据库上使用,其它地方也可以。
至于原理,很简单,利用map而已。复杂的实现在此处就不写了,感兴趣的童鞋可以访问我的包,下载全版的实现。
至于原理,很简单,利用map而已。复杂的实现在此处就不写了,感兴趣的童鞋可以访问我的包,下载全版的实现。
package xyz.cunzi.function.cache; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util.function.Supplier; /** * 一个内存级别的缓存实现,不建议放入static当中,否则会造成Java无法内存回收,此时应当主动调用clear方法清除 * * @author xyz.cunzi * */ public class MemoryCache { private Map<String, Object> map = new ConcurrentHashMap<String, Object>(); private MemoryCache() { } /** * 初始化一个新的缓存器 * * @return */ public static MemoryCache instance() { return new MemoryCache(); } /** * * @param key * 主键生成器,调用此函数应当返回要查询的主键 * @param clazz * 查询到的值得存储类型 * @param load * 如果没找到,那么使用主键从此函数中查询 * @return */ public <T, V> T load(Supplier<V> key, Class<T> clazz, Function<V, T> load) { V k = key.get(); return load(k, clazz, load); } /** * * @param key * 主键 * @param clazz * 查询到的值得存储类型 * @param load * 如果没找到,那么使用主键从此函数中查询 * @return */ @SuppressWarnings("unchecked") public <T, V> T load(V key, Class<T> clazz, Function<V, T> load) { Object t = map.get(clazz.getName() + "." + key); if (t == null) { t = load.apply(key); map.put(clazz.getName() + "." + key, t); } if (t.getClass() == clazz) { return (T) t; } return null; } public void clear() { map.clear(); } }
相关文章推荐
- 自己实现一个内存缓存
- 自己实现一个内存缓存
- 一个不错的java缓存实现,有空好好研究下
- 用java代码实现一个自己的栈.
- java java local cache本地缓存的两种实现,一个基于list轮询一个基于timer定时
- 一个自己编写的xml和JAVA对象之间的转换工具,xml和对象轻松转换(simple-xml2object)
- Java实现的一个画图工具
- 实现一个简易的IoC框架(上)(此篇与Spring.NET无关,为自己手写IoC框架)
- Visual Paradigm - 一个用于绘制UML的java实现的一个工具软件
- 自己动手实现STL 03:内存基本处理工具(stl_uninitialized.h)
- 一个轻量级java缓存的实现
- 实现一个轻量级内存缓存
- Java中如何实现一个类在内存里只能创建一个实例对象
- 颜色控件【MFC】自己写一个ListCtrl控件(实现栅格属性表的编辑)-java教程
- 发一个自己用JS写的实用看图工具实现代码
- Visual Paradigm - 一个用于绘制UML的java实现的一个工具软件
- 对于“检测内存错误”这一用法,我们可以用 valgrind 或者 dmalloc 或者 efence 来达到相同的目的,专业的除错工具比自己山寨一个内存检查器要靠谱。
- 自己封装的一个Java版图片工具,具备压缩,伸缩变换,透明处理,格式转换等功能.
- Java调用poi3.8编写的一个简单XmlCache缓存工具
- 手写一个自己的LocalCache - 基于LinkedHashMap实现LRU