初识Caffeine
缓存在日常开发中启动至关重要的作用,由于是存储在内存中,数据的读取速度是非常快的,能大量减少对数据库的访问,减少数据库的压力。我们把缓存分为两类:
分布式缓存,例如Redis:
优点:存储容量更大、可靠性更好、可以在集群间共享
缺点:访问缓存有网络开销
场景:缓存数据量较大、可靠性要求较高、需要在集群间共享
进程本地缓存,例如HashMap、GuavaCache:
优点:读取本地内存,没有网络开销,速度更快
缺点:存储容量有限、可靠性较低、无法共享
场景:性能要求较高,缓存数据量较小
我们今天会利用Caffeine框架来实现JVM进程缓存。
Caffeine是一个基于Java8开发的,提供了近乎最佳命中率的高性能的本地缓存库。目前Spring内部的缓存使用的就是Caffeine。GitHub地址:https://github.com/ben-manes/caffeine
Caffeine的性能非常好,下图是官方给出的性能对比:
可以看到Caffeine的性能遥遥领先!
缓存使用的基本API:
@Test
void testBasicOps() {// 构建cache对象Cache<String, String> cache = Caffeine.newBuilder().build();// 存数据cache.put("gf", "迪丽热巴");// 取数据String gf = cache.getIfPresent("gf");System.out.println("gf = " + gf);// 取数据,包含两个参数:// 参数一:缓存的key// 参数二:Lambda表达式,表达式参数就是缓存的key,方法体是查询数据库的逻辑// 优先根据key查询JVM缓存,如果未命中,则执行参数二的Lambda表达式String defaultGF = cache.get("defaultGF", key -> {// 根据key去数据库查询数据return "柳岩";});System.out.println("defaultGF = " + defaultGF);
}
Caffeine既然是缓存的一种,肯定需要有缓存的清除策略,不然的话内存总会有耗尽的时候。
Caffeine提供了三种缓存驱逐策略:
基于容量:设置缓存的数量上限
// 创建缓存对象
Cache<String, String> cache = Caffeine.newBuilder().maximumSize(1) // 设置缓存大小上限为 1.build();
基于时间:设置缓存的有效时间
// 创建缓存对象
Cache<String, String> cache = Caffeine.newBuilder()// 设置缓存有效期为 10 秒,从最后一次写入开始计时 .expireAfterWrite(Duration.ofSeconds(10)) .build();
基于引用:设置缓存为软引用或弱引用,利用GC来回收缓存数据。性能较差,不建议使用。
注意:在默认情况下,当一个缓存元素过期的时候,Caffeine不会自动立即将其清理和驱逐。而是在一次读或写操作后,或者在空闲时间完成对失效数据的驱逐。
初识Caffeine相关推荐
- 计算机笔记--【Redis高级】
提示:本文章的内容来源于自己所学的一些知识以及网络 文章目录 一.分布式缓存 1.Redis持久化 1.1.RDB持久化(存数据) 1.1.1.执行时机 1.1.2.RDB原理 1.1.3.小结 1. ...
- HM-SpringCloud微服务系列11.1【多级缓存的意义JVM进程缓存】
HM-SpringCloud微服务系列11:多级缓存-高级篇 1. 什么是多级缓存 多级缓存是亿级流量的缓存方案 浏览器访问静态资源时,优先读取浏览器本地缓存 访问非静态资源(ajax查询数据)时,访 ...
- Redis高级篇-多级缓存
Redis高级篇资料下载 1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: •请求要经过Tomcat处理,Tomcat ...
- 黑马Redis笔记高级篇 | 多级缓存
黑马Redis笔记高级篇 | 多级缓存(黑马教程云服务器踩坑记录) 1.JVM进程缓存(tomcat服务内部) 1.1 导入商品案例 1.2 初识Caffeine 1.3 实现进程缓存 2.Lua语法 ...
- Redis进阶学习08--多级缓存
Redis进阶学习08--多级缓存 什么是多级缓存 JVM进程缓存 环境准备 docker安装mysql docker安装nginx 反向代理 初识Caffeine 实现JVM进程缓存 需求 实现 L ...
- SpringCloud补充与微服务面试题
多级缓存 1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: •请求要经过Tomcat处理,Tomcat的性能成为整个系 ...
- day3----编码-集合-深浅copy-文件操作-函数初识
day3----编码-集合-深浅copy-文件操作-函数初识 本文档主要内容: 一 编码 二 集合 三 深浅copy 四 文件操作 五 函数初识 首先,我们来看看两个字符串的比较 打开cmd,进入do ...
- ⑥python模块初识、pyc和PyCodeObject
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
- 初识java类的接口实现
初识java类的接口实现 如果两个类之间不存在继承关系,且两个类都想实现同一个接口,两个类都必须实现接口中全部方法,否则报语法错误 如果两个类之间存在继承关系也想实现同一个接口,父类如果实现了某个接口 ...
最新文章
- java treemap get_java treeMap 排序后 get不到value
- IPad开发之有帮助的开发工具
- 关于Reporting Service中的Report builder的几个疑问,高手来解答下
- 用JScript.net写.net应用程序
- Golang的数组、切片、映射的理解
- 敏捷项目管理过程改进
- 社会工程学***的八种常用方法
- 微课|中学生可以这样学Python(7.3.3节):成员方法、类方法、静态方法
- java乱码问题详解-值得收藏
- MATLAB FOR PROE
- 阿里巴巴公布了一份最新的AI成绩单
- winform前后端框架_ABP开发框架前后端开发系列(1)框架的总体介绍
- Ubuntu18.04 + anaconda3 +python3.6+ 安装labelImg 标注
- 寻求 华中科大《机械控制工程基础》第五版习题参考答案
- 计算机程序设计员( 国家职业标准三级),计算机程序设计员国家职业标准
- 毕业论文给图、表格、公式编号(不设置多级列表)
- win10 截屏 快捷键(全屏直接保存、全屏间接保存、当前界面)
- php两个问号??表示什么意思
- 腾讯求职经历(后附大量面试题)
- Package com.myapp signatures do not match the previously installed version
热门文章
- Vue导入非模块化的第三方插件功能无效解决方案
- codeforce R 491 (div2)
- css3 :nth-child()选择器的使用
- tomcat启动时,报java.io.EOFException
- BZOJ1798: [Ahoi2009]Seq 维护序列seq
- Appium环境搭建python篇(mac系统)
- C#中Dictionary的用法
- MOSS2010站点大文件上传设置
- 【Java线程】互斥 同步 异步 并发 多线程的区别与联系
- BZOJ5249: [2018多省省队联测]IIIDX(线段树 贪心)