本地缓存产生背景:

本地缓存是指在我们本地的物理空间开辟出一片物理空间,专门用来存储我们需要向服务器端频繁需要的数据,

比如前端页面需要频繁的向后台访问某些数据,这时候我们每次都去数据库查找数据再返回给前台就会有很大的

开销。因为会涉及到磁盘I/O。但是如果我们把这些需要频繁访问的数据放在本地的物理空间,这样在访问的时候

就可以直接访问服务器缓存的数据。缓存这些数据的区域就是本地缓存。java的本地缓存存储在jvm的堆区的老年

代里,大小大约有几百兆。

本地缓存应用场景:

本地缓存虽然可以在本地缓存一些频繁申请的数据,但是毕竟是本地内存,大小还是需要一定限制的。我们一般

开发一些小的项目可以牺牲一定的本地内存当作缓存提高访问效率。开发一些比较大的项目本地缓存的数据量和

支持高并发就肯定不足了。这时候可能就需要分布式集群缓存,比如淘宝双十一的时候,难以估计马云开了多少

台服务器当作本地缓存和消息队列(接受客户的请求)。

本地缓存注意事项:

本地缓存虽然为我们提供了很大的方便,但是我们手动写一套本地缓存的组件还是需要注意很多问题的,数据结构

的选取,(一般用map结构),处理并发机制,本地缓存的过期,本地缓存在集群的同步问题,当内存不足的时候释放

本地内存,缓存的移除等。但是一般的第三方插件为我们处理好了这些问题,例如google guava

看看实现google guava的代码:

public static void main(String[] args) throws ExecutionException, InterruptedException{//缓存接口这里是LoadingCache,LoadingCache在缓存项不存在时可以自动加载缓存LoadingCache<Integer,Student> studentCache//CacheBuilder的构造函数是私有的,只能通过其静态方法newBuilder()来获得CacheBuilder的实例= CacheBuilder.newBuilder()//设置并发级别为8,并发级别是指可以同时写缓存的线程数.concurrencyLevel(8)//设置写缓存后8秒钟过期.expireAfterWrite(8, TimeUnit.SECONDS)//设置缓存容器的初始容量为10.initialCapacity(10)//设置缓存最大容量为100,超过100之后就会按照LRU最近虽少使用算法来移除缓存项.maximumSize(100)//设置要统计缓存的命中率.recordStats()//设置缓存的移除通知.removalListener(new RemovalListener<Object, Object>() {@Overridepublic void onRemoval(RemovalNotification<Object, Object> notification) {System.out.println(notification.getKey() + " was removed, cause is " + notification.getCause());}})//build方法中可以指定CacheLoader,在缓存不存在时通过CacheLoader的实现自动加载缓存.build(new CacheLoader<Integer, Student>() {@Overridepublic Student load(Integer key) throws Exception {System.out.println("load student " + key);Student student = new Student();student.setId(key);student.setName("name " + key);return student;}});for (int i=0;i<20;i++) {//从缓存中得到数据,由于我们没有设置过缓存,所以需要通过CacheLoader加载缓存数据Student student = studentCache.get(1);System.out.println(student);//休眠1秒TimeUnit.SECONDS.sleep(1);}System.out.println("cache stats:");//最后打印缓存的命中率等情况System.out.println(studentCache.stats().toString());}

cache stats:
CacheStats{hitCount=17, missCount=3, loadSuccessCount=3, loadExceptionCount=0, totalLoadTime=1348802, evictionCount=2}

看看到在20此循环中命中次数是17次,未命中3次,这是因为我们设定缓存的过期时间是写入后的8秒,所以20秒内会

失效两次,另外第一次获取时缓存中也是没有值的,所以才会未命中3次,其他则命中。

上面的代码来自博文:使用google guava做内存缓存

java本地缓存 google guava相关推荐

  1. java本地缓存_java缓存——(五)LocalCache本地缓存分享

    LocalCache本地缓存分享 前言 一.本地缓存应用场景 二.java本地缓存标准 三.java开源缓存框架 四.LocalCache实现 结束语 前言 本次分享探讨java平台的本地缓存,是指占 ...

  2. Caffeine Cache~高性能 Java 本地缓存之王

    前面刚说到Guava Cache,他的优点是封装了get,put操作:提供线程安全的缓存操作:提供过期策略:提供回收策略:缓存监控.当缓存的数据超过最大值时,使用LRU算法替换.这一篇我们将要谈到一个 ...

  3. java本地缓存简介

    java中的本地缓存,工作后陆续用到,一直想写,一直无从下手,最近又涉及到这方面的问题了,梳理了一下.自己构造单例.guava.ehcache基本上涵盖了目前的大多数行为了. 为什么要有本地缓存? 在 ...

  4. 重新认识下JVM级别的本地缓存框架Guava Cache——优秀从何而来

    Guava Cache初识 Guava是Google提供的一套JAVA的工具包,而Guava Cache则是该工具包中提供的一套完善的JVM级别的高并发缓存框架.其实现机制类似ConcurrentHa ...

  5. 实现 Java 本地缓存

    缓存,我相信大家对它一定不陌生,在项目中,缓存肯定是必不可少的.市面上有非常多的缓存工具,比如 Redis.Guava Cache 或者 EHcache.对于这些工具,我想大家肯定都非常熟悉,所以今天 ...

  6. java几点钟_实现 Java 本地缓存,该从这几点开始

    缓存,我相信大家对它一定不陌生,在项目中,缓存肯定是必不可少的.市面上有非常多的缓存工具,比如 Redis.Guava Cache 或者 EHcache. 对于这些工具,我想大家肯定都非常熟悉,所以今 ...

  7. 本地缓存之Guava简单使用

    文章目录 使用场景 Guava Cache 的优势 Guava Cache使用 CacheLoader Callable 删除 主动删除 过期删除 基于容量删除 引用删除 高级用法 并发设置 更新锁定 ...

  8. 常见java本地缓存

    Caffeine 特点 Caffeine的底层数据存储采用ConcurrentHashMap. Caffeine是Spring 5默认支持的Cache,可见Spring对它的看重,Spring抛弃Gu ...

  9. Java本地缓存框架系列-Caffeine-1. 简介与使用

    Caffeine 是一个基于Java 8的高性能本地缓存框架,其结构和 Guava Cache 基本一样,api也一样,基本上很容易就能替换. Caffeine 实际上就是在 Guava Cache ...

最新文章

  1. Maven向本地仓库导入官方仓库没有的jar包
  2. 《请不要回应外星人2019》
  3. 你知道怎么在生产环境下部署tomcat吗?,灵魂拷问
  4. WebView跳转到底部
  5. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:移除默认的列表样式
  6. GoJs Pictures 官方介绍文档
  7. U-Boot源码目录分析(VScode工程创建及文件夹过滤)
  8. vmware中ubuntu虚拟机扩容
  9. win8桌面显示开始菜单教程
  10. SpringCloud微框架系列整体模块梳理
  11. Java基础学习总结(51)——JAVA分层理解
  12. 设置好网络协议了为何网络还是不通_记一次菜鸟网络的面试经历
  13. 华为手机微信小程序上传不了照片
  14. django ajax 简书,Django中ajax上传图片详细步骤
  15. 计算机win7安装打印机,Win7系统怎么安装打印机 win7安装打印机的方法【图文详解】...
  16. Gym 100818F Irrational Roots (数学)
  17. java 感想_Java课程感想
  18. python怎样用填充颜色_python中如何给图形填充颜色
  19. 每月与英国签证官网聊?
  20. Linux系统自动更新时间命令的详细说明

热门文章

  1. mysql显示表已存在_mysql的安装与卸载
  2. 【创新应用】5AloT(5G+AI+物联网)深度研究报告:下一轮科技红利
  3. 磁盘加锁专家V2.63官方版
  4. 六维/轴力传感器Set-Bias的使用
  5. bes2300之i2s(八)
  6. ThinkPadE425拆机图
  7. 自定义Office中格式刷的快捷键
  8. STM32——DS18B20温度传感器
  9. Ubuntu下安装GTK+及Glade开发C应用界面
  10. 深入理解图优化与g2o : 图优化理论与g2o的使用