本文源码:GitHub·点这里 || GitEE·点这里

一、Ehcache缓存简介

1、基础简介

EhCache是一个纯Java的进程内缓存框架,具有快速、上手简单等特点,是Hibernate中默认的缓存提供方。

2、Hibernate缓存

Hibernate三级缓存机制简介:

一级缓存:基于Session级别分配一块缓存空间,缓存访问的对象信息。Session关闭后会自动清除缓存。

二级缓存:是SessionFactory对象缓存,可以被创建出的多个 Session 对象共享,二级缓存默认是关闭的,如果要使用需要手动开启,并且依赖EhCache组件。

三级缓存:查询缓存,配置开启该缓存的情况下,重复使用一个sql查询某个范围内的数据,会进行缓存。

3、EhCache缓存特点

  • 快速,简单,并且提供多种缓存策略;
  • 缓存数据有两级:内存和磁盘,无需担心容量问题;
  • 缓存数据会在虚拟机重启的过程中写入磁盘;
  • 可以通过RMI、可插入API等方式进行分布式缓存;
  • 具有缓存和缓存管理器的侦听接口;
  • 支持多缓存管理器实例,以及一个实例的多个缓存区域;
  • 提供Hibernate的缓存实现;

4、对比Redis缓存

Ehcache:直接在Jvm虚拟机中缓存,速度快,效率高,不适合处理大规模缓存数据,在分布式环境下,缓存数据共享操作复杂;

Redis:作为独立的缓存中间件,在分布式缓存系统中非常好用,缓存数据共享,有效支撑大量数据缓存,支持哨兵模式,或者集群模式的高可用成熟方案;

二、集成SpringBoot框架

1、核心依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId>
</dependency>

2、加载配置

基础配置

spring:cache:ehcache:config: classpath:ehcache.xml

启动类注解

@EnableCaching
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class,args) ;}
}

3、配置详解

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"><!-- 操作系统缓存的临时目录,内存满后写入该目录 --><diskStore path="java.io.tmpdir"/><defaultCachemaxElementsInMemory="1000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"maxElementsOnDisk="10000000"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"><persistence strategy="localTempSwap"/></defaultCache><cache name="userEntity"maxElementsInMemory="1000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"maxElementsOnDisk="10000000"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"><persistence strategy="localTempSwap"/></cache>
</ehcache>

配置参数说明

maxElementsOnDisk:磁盘缓存中最多可以存放的元素数量;

eternal:缓存中对象是否永久有效;

timeToIdleSeconds:当eternal=false时使用,缓存数据有效期(单位:秒),时间段内没有访问该元素,将被清除;

timeToLiveSeconds:缓存数据的存活时间;

maxElementsInMemory:内存中最多可以存放的元素数量,overflowToDisk=true,则会将Cache中多出的元素放入磁盘文件中,若overflowToDisk=false,则根据memoryStoreEvictionPolicy策略替换Cache中原有的元素;

diskExpiryThreadIntervalSeconds:磁盘缓存的清理线程运行间隔;

memoryStoreEvictionPolicy:缓存释放策略,LRU会优先清理最少使用的缓存;

localTempSwap:持久化策略,当堆内存或者非堆内存里面的元素已经满了的时候,将其中的元素临时的存放在磁盘上,重启后就会消失;

三、注解用法

@Service
public class CacheService {private static final Logger LOGGER = LoggerFactory.getLogger(CacheService.class);@Resourceprivate UserMapper userMapper ;@Cacheable(value="userEntity")  // 在缓存有效期内,首次查询才访问数据库public UserEntity getById (Integer id){// 通过日志,标识方法是否执行LOGGER.info("getById..."+id);return userMapper.selectById(id) ;}@CacheEvict(value="userEntity",key = "#id") //该ID数据更新,清空该ID缓存public void updateUser(Integer id) {UserEntity user = new UserEntity() ;user.setId(id);user.setUserName("myCache");userMapper.updateById(user);}
}

@Cacheable:注解标记在一个方法上,也可以标记在一个类上,标记在一个方法上表示该方法支持缓存,该方法被调用后将其返回值缓存起来,下次同样的请求参数执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。

@CacheEvict:注解标记在需要清除缓存元素的方法或类上的,当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作,并且可以按照指定属性清除。

四、源代码地址

GitHub·地址
https://github.com/cicadasmile/middle-ware-parent
GitEE·地址
https://gitee.com/cicadasmile/middle-ware-parent

推荐阅读:SpringBoot进阶系列

序号 文章标题
01 Boot2 整合 shard-jdbc 中间件,实现数据分库分表
02 Boot2 整合 JavaMail ,实现异步发送邮件功能
03 Boot2 整合 RocketMQ ,实现请求异步处理
04 Boot2 整合 Swagger2 ,构建接口管理界面
05 Boot2 整合 QuartJob ,实现定时器实时管理
06 Boot2 整合 Redis集群 ,实现消息队列场景
07 Boot2 整合 Dubbo框架 ,实现RPC服务远程调用
08 Boot2 整合 ElasticSearch框架,实现高性能搜索引擎
09 Boot2 整合 JWT 框架,解决Token跨域验证问题
10 Boot2 整合 FastDFS 中间件,实现文件分布管理
11 Boot2 整合 Shiro 框架,实现用户权限管理
12 Boot2 整合 Security 框架,实现用户权限管理
13 Boot2 整合 ClickHouse数据库,实现数据高性能查询分析
14 Boot2 整合 Drools规则引擎,实现高效的业务规则
15 Boot2 整合 多数据源,配置MybatisPlus增强插件
16 Boot2 整合 Zookeeper组件,管理架构中服务协调
17 Boot2 整合Nacos组件,环境搭建和入门案例详解
18 文件系统(01):基于Boot2框架,管理Excel和PDF
18 文件系统(02):基于Boot2框架,管理Xml和CSV
19 Boot2 整合 Kafka组件,应用案例和流程详解
20 Boot2 整合 ElasticJob框架,定制化管理流程
21 Boot2 整合JTA组件,多数据源事务管理
22 Boot2 整合FreeMarker模板,完成页面静态化处理
23 Boot2 整合MinIO中间件,实现文件便捷管理

SpringBoot2 整合Ehcache组件,轻量级缓存管理相关推荐

  1. SpringBoot2 整合JTA组件,多数据源事务管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.JTA组件简介 1.JTA基本概念 JTA即Java-Transaction-API,JTA允许应用程序执行分布式事务处理,即在两个或多个 ...

  2. SpringBoot2 整合Kafka组件,应用案例和流程详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.搭建Kafka环境 1.下载解压 -- 下载 wget http://mirror.bit.edu.cn/apache/kafka/2.2 ...

  3. java redis缓存实例_spring项目整合ehcache和redis缓存实例

    项目描述 Spring的缓存机制非常灵活,可以对容器中任意Bean或者Bean的方法进行缓存,因此这种缓存机制可以在JavaEE应用的任何层次上进行缓存. Spring缓存底层也是需要借助其他缓存工具 ...

  4. Mybatis的一、二级缓存的原理与使用、禁止指定方法的二级缓存与刷新缓存、Mybatis整合Ehcache、二级缓存的使用场景与局限性-day03

    目录 第一节 Mybatis的缓存 1.1 Mybatis的缓存理解 1.2 一级缓存 原理 使用与测试 1.3 二级缓存 原理 使用与测试 禁用指定方法的二级缓存 刷新缓存 总结 1.4 整合ehc ...

  5. SpringBoot2 整合 Zookeeper组件,管理架构中服务协调

    本文源码:GitHub·点这里 || GitEE·点这里 一.Zookeeper基础简介 1.概念简介 Zookeeper是一个Apache开源的分布式的应用,为系统架构提供协调服务.从设计模式角度来 ...

  6. SpringBoot2 整合Nacos组件,环境搭建和入门案例详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.Nacos基础简介 1.概念简介 Nacos 是构建以"服务"为中心的现代应用架构,如微服务范式.云原生范式等服务基础 ...

  7. SpringBoot2 整合OAuth2组件,模拟第三方授权访问

    本文源码:GitHub·点这里 || GitEE·点这里 一.模式描述 授权服务 验证第三方服务的身份,验证邮箱用户的身份,记录和管理认证Token,为资源服务器提供Token校验.场景:第三方网站借 ...

  8. MyBatis整合ehcache实现二级缓存

    添加jar包 <dependency><groupId>org.mybatis.caches</groupId><artifactId>mybatis- ...

  9. atomikosdatasourcebean mysql_SpringBoot2整合JTA组件实现多数据源事务管理

    一.JTA组件简介 1.JTA基本概念 JTA即Java-Transaction-API,JTA允许应用程序执行分布式事务处理,即在两个或多个网络计算机资源上访问并且更新数据.JDBC驱动程序对JTA ...

最新文章

  1. python查询MySQL写入Excel
  2. matplotlib 雷达图2
  3. nstimer循环引用_ios开发中经典循环引用场景?
  4. ChildWindow在Open时旋转出现
  5. war包怎么解压_渣渣辉表情包下载-渣渣辉抖音表情包动态图下载
  6. java自定义表单_JSP实现用于自动生成表单标签html代码的自定义表单标签
  7. string 与stringbuilder的区别
  8. SQLite: 关于日期的标准化问题
  9. 数字孪生-使用资产管理壳的IOT案例研究
  10. editormd支持上传视频
  11. Centos任务栏不见了
  12. 线上CPU飙高问题排查 (Java)
  13. 南京审计学院计算机专业老师,南京审计学院如此对待一位好老师!!(转载)
  14. 未明学院:“我是女生,能做数据分析吗?”
  15. 酷派大神F2使用QPST进行nv备份恢复,解决无信号问题
  16. Unity改变应用游戏的分辨率 resoution
  17. 使用级联Softmax和广义大幅度损失训练的改进DCNN进行细粒度图像分类
  18. PRD到底该怎么写?更全面的文档范例来了
  19. 聊一聊前端图片懒加载背后的故事
  20. 怎么做一份漂亮的地质图

热门文章

  1. Python是什么类型的语言?
  2. DLL入口点函数DllMain
  3. twisted系列教程十七–用inlineCallbacks来管理callbacks
  4. Python函数中参数* 和 ** 的区别
  5. Java中如何组装字符串
  6. 排序算法:堆排序算法实现及分析
  7. 我的博客园css样式
  8. Graph_Master(连通分量_Poj_1904)
  9. CentOS7 Minimal 安装后出现的若干问题解决办法
  10. ant 彻底了解(转)