当前位置: 首页 > 科技观察

SpringBoot-cacheEhcache

时间:2023-03-13 12:21:42 科技观察

springcache(EhCache)的使用在Spring3.1中引入,但只提供了缓存接口,并没有提供具体的缓存实现。它的实现需要第三方缓存实现(Generic、EhCache、Redis等)。常用的有EhCache和Redis。使用Redis时,需要先安装Redis服务器。为什么要引入缓存来提高服务性能:比如项目开发完成后,各种数据会随着时间的推移急剧增加。在数据越来越大的情况下,一个简单的Select*fromStudent可能会非常耗时,成为我们用户体验的痛点。并且在分布式远程调用的过程中,网络开销比较大。如果加上以上情况,整体响应时间会增加,得不偿失。所以缓存对于减轻数据库压力是非常有必要的:当数据变大,请求增加的时候,数据库的压力会大大增加,缓存的出现可以减轻数据库的压力。SpringBoot抽象缓存刚才说了Spring3.1引入了缓存接口,可以对接不同的缓存技术。主要接口有:org.springframework.cache.Cache(定义缓存的接口)。org.springframework.cache.CacheManager:缓存管理器针对不同的缓存技术有不同的缓存管理器。SpringBoot会按照以下顺序自动配置这些框架提供的缓存管理器。通用的。JCache(JSR-107)(EhCache3、Hazelcast、Infinispan等)。缓存2.x。淡褐色。无穷无尽。沙发底座。雷迪斯。咖啡因。简单的。添加缓存依赖的代码实现在pom.xml中添加spring-boot-starter-cache。org.springframework.bootspring-boot-starter-cache开启缓存使用注解**@EnableCaching**注意开启缓存功能。@Configuration@EnableCachingpublicclassMyCacheConfig{}数据缓存缓存操作中常用的注解如下:@Cacheable@Cacheable可以标注在方法和类上。执行时会先检查缓存数据是否存在,如果存在则直接返回缓存数据,如果不存在则支付方法并返回缓存给缓存,常用的三个属性。value:用于描述缓存的名称,可以指定一个或多个。key:缓存的key值,可以为空,如果不为空,需要安装SpEl表达式来写入。condition:缓存的条件,可以为空。如果按照SpEl方法写,返回true则缓存,false则不缓存。@Cacheable(value="student",key="#id",condition="#id>11")@OverridepublicStudentfindById(Longid){returnstudentMapper.findById(id);}}@CachePut@CachePut可以标记在方法和类上,常用的属性和**@Cacheable是一样的,不同的是在执行方法之前,不会检查缓存中是否存在,而是在方法执行之后执行后,结果会放入缓存中,主要用于新增和修改数据。@CachePut(value="student",key="#student.id")@OverridepublicStudentupdateStudent(Student学生){studentMapper.updateStudent(学生);返校生;}@CacheEvict@CacheEvict可以在方法和类方面进行标记,用于清除缓存,只是普通注解与@Cacheable相同。allEntries:是否清除所有缓存,默认为false,为true时,调用该方法后会清除所有缓存。beforeInvocation:是否在方法执行之前。默认为假。当它为真时,缓存将在调用方法之前被清除。如果为false,如果方法抛出异常,缓存不会被清除。@CacheEvict(value="student",key="#id",allEntries=true,beforeInvocation=true)publicvoiddeleteStudent(@Param("id")Longid){System.out.println("deleteStudent数据库..."+ID);studentMapper.deleteStudent(id);}集成EhCache因为springboot只是对缓存的抽象,具体实现缓存还需要依赖第三方的缓存框架。这里介绍EhCache框架来实现缓存。添加EhCache依赖在pom.xml中添加EhCache依赖。net.sf.ehcacheehcache<版本>2.10.9.2添加Ehcache相关配置1.在src\main\resources路径下添加ehcache.xml文件。<缓存名称="student"maxElementsInMemory="10000"eternal="true"overflowToDisk="true"diskPersistent="true"diskExpiryThreadIntervalSeconds="600"/>注解含义:name:缓存的名称,与缓存注解中的value属性相同。maxElementsInMemory:缓存的最大数量。overflowToDisk:缓存达到最大数量,将被写入磁盘。eternal:缓存是否永久有效,如果设置为true,超时无效。diskExpiryThreadIntervalSeconds:磁盘过期线程的运行时间间隔,默认为120s。2.在application.yml中添加ehcache.xml的路径。spring:cache:type:ehcacheehcache:config:classpath:/ehcache.xmlehcache.config默认路径为src\main\resourcesehcache.xm,无需配置。测试1.测试@Cacheable(value="student",key="#id",cndition="#id>11")使用postman测试接口http://localhost:8899/student/select/11。点击两次后,我们在控制台中发现,两次都进入了方法。这是因为我们判断添加的id大于11,会放入缓存。如果id>11比如http://localhost:8899/student/select/13,那么在两次点击的情况下,我们只进入方法一次。其他的测试可以自己测试,这里就不多测试了。