java本地缓存 google guava
本地缓存产生背景:
本地缓存是指在我们本地的物理空间开辟出一片物理空间,专门用来存储我们需要向服务器端频繁需要的数据,
比如前端页面需要频繁的向后台访问某些数据,这时候我们每次都去数据库查找数据再返回给前台就会有很大的
开销。因为会涉及到磁盘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相关推荐
- java本地缓存_java缓存——(五)LocalCache本地缓存分享
LocalCache本地缓存分享 前言 一.本地缓存应用场景 二.java本地缓存标准 三.java开源缓存框架 四.LocalCache实现 结束语 前言 本次分享探讨java平台的本地缓存,是指占 ...
- Caffeine Cache~高性能 Java 本地缓存之王
前面刚说到Guava Cache,他的优点是封装了get,put操作:提供线程安全的缓存操作:提供过期策略:提供回收策略:缓存监控.当缓存的数据超过最大值时,使用LRU算法替换.这一篇我们将要谈到一个 ...
- java本地缓存简介
java中的本地缓存,工作后陆续用到,一直想写,一直无从下手,最近又涉及到这方面的问题了,梳理了一下.自己构造单例.guava.ehcache基本上涵盖了目前的大多数行为了. 为什么要有本地缓存? 在 ...
- 重新认识下JVM级别的本地缓存框架Guava Cache——优秀从何而来
Guava Cache初识 Guava是Google提供的一套JAVA的工具包,而Guava Cache则是该工具包中提供的一套完善的JVM级别的高并发缓存框架.其实现机制类似ConcurrentHa ...
- 实现 Java 本地缓存
缓存,我相信大家对它一定不陌生,在项目中,缓存肯定是必不可少的.市面上有非常多的缓存工具,比如 Redis.Guava Cache 或者 EHcache.对于这些工具,我想大家肯定都非常熟悉,所以今天 ...
- java几点钟_实现 Java 本地缓存,该从这几点开始
缓存,我相信大家对它一定不陌生,在项目中,缓存肯定是必不可少的.市面上有非常多的缓存工具,比如 Redis.Guava Cache 或者 EHcache. 对于这些工具,我想大家肯定都非常熟悉,所以今 ...
- 本地缓存之Guava简单使用
文章目录 使用场景 Guava Cache 的优势 Guava Cache使用 CacheLoader Callable 删除 主动删除 过期删除 基于容量删除 引用删除 高级用法 并发设置 更新锁定 ...
- 常见java本地缓存
Caffeine 特点 Caffeine的底层数据存储采用ConcurrentHashMap. Caffeine是Spring 5默认支持的Cache,可见Spring对它的看重,Spring抛弃Gu ...
- Java本地缓存框架系列-Caffeine-1. 简介与使用
Caffeine 是一个基于Java 8的高性能本地缓存框架,其结构和 Guava Cache 基本一样,api也一样,基本上很容易就能替换. Caffeine 实际上就是在 Guava Cache ...
最新文章
- Maven向本地仓库导入官方仓库没有的jar包
- 《请不要回应外星人2019》
- 你知道怎么在生产环境下部署tomcat吗?,灵魂拷问
- WebView跳转到底部
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:移除默认的列表样式
- GoJs Pictures 官方介绍文档
- U-Boot源码目录分析(VScode工程创建及文件夹过滤)
- vmware中ubuntu虚拟机扩容
- win8桌面显示开始菜单教程
- SpringCloud微框架系列整体模块梳理
- Java基础学习总结(51)——JAVA分层理解
- 设置好网络协议了为何网络还是不通_记一次菜鸟网络的面试经历
- 华为手机微信小程序上传不了照片
- django ajax 简书,Django中ajax上传图片详细步骤
- 计算机win7安装打印机,Win7系统怎么安装打印机 win7安装打印机的方法【图文详解】...
- Gym 100818F Irrational Roots (数学)
- java 感想_Java课程感想
- python怎样用填充颜色_python中如何给图形填充颜色
- 每月与英国签证官网聊?
- Linux系统自动更新时间命令的详细说明