有的时候需要用因为效率问题需要使用一些最底层的代码开发,免不了部分地方又要采用高级一点的功能,因此,此时需要自己动手实现一部分逻辑,此处使用map做内存级别的缓存,类似hibernate里面的一级缓存。此处的实现不只是可以在数据库上使用,其它地方也可以。
至于原理,很简单,利用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();}
}

自己动手写工具(一)一个用Java8实现的内存级别的缓存相关推荐

  1. 自己动手写工具:百度图片批量下载器

    开篇:在某些场景下,我们想要对百度图片搜出来的东东进行保存,但是一个一个得下载保存不仅耗时而且费劲,有木有一种方法能够简化我们的工作量呢,让我们在离线模式下也能爽爽地浏览大量的美图呢?于是,我们想到了 ...

  2. 【原创】自己动手写工具----签到器[Beta 1.0]

    写在前面 最近公司没有什么项目,想通过项目练练手的机会也没有,只能自己学习了,因此空下来的时间也挺多的,就打开网页看看吧,哎,一打开就让签到(像什么百度知道啊.百度云盘啊之类的),我签到的目的是获取积 ...

  3. 80行代码自己动手写一个表格拆分与合并小工具(文末附工具下载)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 瑶池阿母绮窗开,黄竹歌声动地哀. ...

  4. CowNew开源团队新书《自己动手写开发工具》隆重上市

    <自己动手写开发工具--基于Eclipse的工具开发> 本书系统地介绍了SWT.Draw2D.GEF.JET等与Eclipse插件开发相关的基础知识,并且以实际的开发案例来演示这些知识的实 ...

  5. 《自己动手写开发工具》试读版电子书及光盘

    <自己动手写开发工具>系统地介绍了SWT.Draw2D.GEF.JET等与Eclipse插件开发相关的基础知识,并且以实际的开发案例来演示这些知识的实战性应用,通过对这些实际开发案例的学习 ...

  6. 自己动手写一个 strace

    这次主要分享一下一个动手的东西,就是自己动手写一个 strace 工具. 用过 strace 的同学都知道,strace 是用来跟踪进程调用的 系统调用,还可以统计进程对 系统调用 的统计等.stra ...

  7. 吕文翰 php,自己动手写一个 iOS 网络请求库(三)——降低耦合

    自己动手写一个 iOS 网络请求库(三)--降低耦合 2015-5-22 / 阅读数:16112 / 分类: iOS & Swift 本文中,我们将一起降低之前代码的耦合度,并使用适配器模式实 ...

  8. 自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用...

    自己动手写一个推荐系统 废话: 最近朋友在学习推荐系统相关,说是实现完整的推荐系统,于是我们三不之一会有一些讨论和推导,想想索性整理出来. 在文中主要以工程中做推荐系统的流程着手,穿插一些经验之谈,并 ...

  9. 自己动手写一个简单的bootloader

    自己动手写一个简单的bootloader 15年10月31日19:44:27 (一) start.S 写这一段代码前,先要清楚bootloader开始的时候都做什么了.无非就是硬件的初始化,我们想要写 ...

最新文章

  1. java 笔记(3)多态 容易理解
  2. ctf图片隐写之修改图片高度
  3. java反射 面试题_使用Java反射更改私有静态最终字段
  4. IBastis配置实例
  5. 如何查找业务用例和业务执行者
  6. WAIC开发者日倒计时一天,收藏好这份完整日程
  7. ROS在类中发布和接受消息(自定义消息)
  8. 【华为云技术分享】漫谈LiteOS-Huawei_IoT_Link_SDK_OTA 开发指导
  9. (86)FPGA读文件激励(readmemh)
  10. 人工智能/数据科学比赛汇总 2019.5
  11. HTML、CSS、JS对unicode字符的不同处理
  12. yii2 错误处理
  13. epson连接计算机后无法打印,如何解决连接到Epson打印机后计算机无法打印的问题...
  14. modal 可拖拽 elementui antd
  15. 病毒conime.exe、mmlucj.exe、severe.exe 查杀办法
  16. python 百度翻译爬虫(可翻译句子及文章)(偷偷说一句,保姆级教程哦)
  17. CKA考试指南和攻略
  18. 交大网院计算机第五次作业答案,2015交大网院计算机第三次作业word操作题
  19. 无线网卡驱动正常却搜索不到无线信号
  20. 我的世界服务器显示大字,我的世界上面指令让界面出现字体 | 手游网游页游攻略大全...

热门文章

  1. Aprioriall算法
  2. 机器学习_评价指标Accuracy(准确率)、Precision(精准度/查准率)、Recall(召回率/查全率)、F1 Scores详解
  3. timeit.Timer()与timeit.timeit()
  4. 01 TVM环境编译
  5. ROS安装/// rosdep update/the read operation is timed out
  6. 实现GB28181平台级联到海康平台的级联
  7. 枚举Word表格AutoFormat样式
  8. 关于设置背景图片的透明度(html+css)
  9. java处理解析xml文件的几种方法及每种方法的区别
  10. 【Unity 3D游戏开发】在Unity使用NoSQL数据库方法介绍