首页 > 其他分享 >SpringBoot 缓存Ehcache的使用说明

SpringBoot 缓存Ehcache的使用说明

时间:2023-10-25 22:31:29浏览次数:31  
标签:Ehcache EhCache 缓存 SpringBoot 添加 ehcache student id

pring缓存(cache)是在Spring3.1开始引入的,但是其本身只提供了缓存接口,不提供具体缓存的实现,其实现需要第三方缓存实现(Generic、EhCache、Redis等)。EhCache、Redis比较常用,使用Redis的时候需要先安装Redis服务器。

为什么引入缓存

  • 提升服务性能
    例如在项目开发完成以后,随着时间推移,各种数据急剧增加,在数据不断增加的情况下,一个简单的Select *  from  Student,都可能非常耗时,变成我们用户体验的痛点。并且在分布式远程调用的过程中,网络开销本来就比较大,如果再加上上面情况导致整体响应时间变大,得不偿失,因此缓存是十分必要的
  • 减少数据库压力,当数据增大,请求变多以后,数据库的压力将大大增加,缓存的出现可以减轻数据库压力。

SpringBoot抽象缓存

刚才说了Spring3.1引入了缓存接口,可以对接不同的缓存技术主要接口有:

  • org.springframework.cache.Cache  (定义缓存的接口)
  • org.springframework.cache.CacheManager:缓存管理器针对不同的缓存技术,有不同的缓存管理器,SpringBoot会按照以下顺序自动配置这些框架提供的缓存管理器。
  • Generic
  • JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, and others)
  • EhCache 2.x
  • Hazelcast
  • Infinispan
  • Couchbase
  • Redis
  • Caffeine
  • Simple

代码实现

添加缓存依赖

在pom.xml中添加spring-boot-starter-cache

<!--数据缓存-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

开启缓存

使用注解**@EnableCaching**注解开启缓存功能

@Configuration
@EnableCaching
public class MyCacheConfig {
}

数据缓存

在缓存操作中常用的注解有以下:

@Cacheable

@Cacheable可以标记在方法和类上面,在执行的时候会先看缓存数据是否存在,如果存在直接返回缓存数据,如果不存在就会支付方法并将缓存返回到缓存中,常用的三个属性

  • value:用于说明缓存的名称,可以指定一个或者多个
  • key:缓存的键值可以为空,如果不为空需要安装SpEl表达方式编写
  • condition:缓存的条件,可以为空,如果使用按照SpEl方式编写,返回true则缓存,false不缓存。
@Cacheable(value = "student",key = "#id",condition = "#id>11")
    @Override
    public Student findById(Long id) {
        return studentMapper.findById(id);
    }

@CachePut

@CachePut可以标注在方法和类上面,常用属性和**@Cacheable相同,不同之处在于执行方法前不会查看缓存中是否存在,而是方法执行完成以后将结果放入缓存中,多用于数据的添加和修改**

@CachePut(value = "student",key = "#student.id")
    @Override
    public Student updateStudent(Student student){
        studentMapper.updateStudent(student);
        return  student;
    }

@CacheEvict

@CacheEvict可以标注在方法和类方面,用于清除缓存,常用注解除了和@Cacheable相同以外还有

  • allEntries:是否清空所有缓存,默认false,当为true时,调用方法后就会清空所有缓存
  • beforeInvocation:是否在方法执行前情况,默认false,为true的时候,在方法调用前就会清空缓存,false的时候如果方法抛出异常则不会清除缓存。
@CacheEvict(value = "student",key = "#id",allEntries = true,beforeInvocation = true)
    public void deleteStudent(@Param("id") Long id){
        System.out.println("deleteStudent数据库..." + id);
         studentMapper.deleteStudent(id);
    }

集成EhCache

因为springboot只是缓存的抽象,要具体实现缓存还有依赖第三方缓存框架,我们这里介绍EhCache框架实现缓存

添加EhCache依赖

在pom.xml中添加EhCache依赖

<!-- https://mvnrepository.com/artifact/net.sf.ehcache/ehcache -->
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
            <version>2.10.9.2</version>
        </dependency>

添加Ehcache相关配置

  1. src\main\resources路径下添加ehcache.xml文件
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="ehcache.xsd">

    <cache name="student"
           maxElementsInMemory="10000"
           eternal="true"
           overflowToDisk="true"
           diskPersistent="true"
           diskExpiryThreadIntervalSeconds="600"/>

</ehcache>

注解含义

  • name:缓存名称和缓存注解中value属性相同即可
  • maxElementsInMemory:缓存的最大数量
  • overflowToDisk:缓存达到最大数量,会写入到磁盘
  • eternal:缓存是否永久有效,如果设置为true,则timeout无效
  • diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认120s

2.在application.yml添加ehcache.xml的路径

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

ehcache.config的默认路径为src\main\resourcesehcache.xm,所以也可以不配置。

测试

1.测试@Cacheable(value = "student",key = "#id",cndition = "#id>11")

使用postman测试接口http://localhost:8899/student/select/11

点击两次我们在console发现,两次都进入了方法,这是因为我们有判断添加id大于11才会放入缓存中


如果id>11例如http://localhost:8899/student/select/13,那么点击两次的情况下,我们只进入了方法一次。


其他测试可以自行测试,这里就不过多测试了。

标签:Ehcache,EhCache,缓存,SpringBoot,添加,ehcache,student,id
From: https://blog.51cto.com/maguobin/8026005

相关文章

  • SpringBoot 实现大文件断点续传
    最近在工作中有涉及到文件上传功能,需求方要求文件最大上限为1G,如果直接将文件在前端做上传,会出现超长时间等待,如果服务端内存不够,会直接内存溢出,此时我们可以通过断点续传方式解决,前端我们通过WebUploader实现文件分割和上传,语言是React,后端我们通过SpringBoot实现文件接收和组装......
  • 一篇了解springboot3请求参数种类及接口测试
    SpringBoot3数据请求:原始数据请求://原始方式@RequestMapping("/simpleParam")publicStringsimpleParam(HttpServletRequestrequest){//获取请求参数Stringname=request.getParameter("name");Stringage=request.getParame......
  • Springboot 启动
    参考:rhyme  : SPRINGBOOT启动流程及其原理fhfirehuo: SpringBoot的启动流程Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等;但他们的基础都是Spring的ioc和aop,ioc 提供了依赖注入的容器, aop解决了面向切面编程,然后在此两者的基础上实现了其他延......
  • 由遍历二维数组的方式引出缓存内存cpu
    对于二维数组,想要遍历的话,一行一行读和一列一列都读可以,但是大多数情况都选择一行一行,为什么呢?涉及到一个缓存的概念,一般都是cpu去计算,它会先去缓存找,如果找不到才去内存,先说缓存,一般缓存就是类似于一行一行,有个临近效应,顺便把旁边的也读了,十分方便,这就是缓存,入股一列一列,读完......
  • SpringBoot自动配置原理解析
    1:什么是SpringBoot自动配置首先介绍一下什么是SpringBoot,SpringBoost是基于Spring框架开发出来的功能更强大的Java程序开发框架,其最主要的特点是:能使程序开发者快速搭建一套开发环境。SpringBoot能将主流的开发框架(例如SpringMVC,Dubbo,Mybatis,Redis等),做到像Maven导入Jar包一......
  • 浏览器缓存机制
    缓存可以说是性能优化中简单⾼效的⼀种优化⽅式了,它可以显著减少⽹络传输所带来的损耗。对于⼀个数据请求来说,可以分为发起⽹络请求、后端处理、浏览器响应三个步骤。浏览器缓存可以帮助我们在第⼀和第三步骤中优化性能。⽐如说直接使⽤缓存⽽不发起请求,或者发起了请求但后端存......
  • geoserver发布wms服务设置缓存响应头
    在Geoserver中发布WMS服务时,可以通过以下步骤设置缓存:打开Geoserver的管理界面,并进入“图层”页面。点击发布标签,就可以看到CachingSettings设置完成后,点击“保存”按钮保存更改即可生效。通过以上步骤,就可以在Geoserver中为WMS服务设置缓存了。......
  • springboot 06 idea提交到Gitee
         --->commit   首次要填Gitee的账号密码  ......
  • SpringBoot内容协商(Content Negotiation)二 —— 自定义消息转换器(MessageConverter)
    SpringBoot内置的消息转换器SpringBoot没有处理返回yaml格式的数据,这里需要手动添加处理这种返回格式的支持。导入依赖<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-yaml</artifactId></dependency>添加配......
  • 【Springboot文件上传】前后端双开,大文件秒传、断点续传的解决方案和优雅实现
    思路和解决方案探讨秒传这里指的“秒传”,是指:当用户选择上传一个文件时,服务端检测该文件之前是否已经被上传过,如果服务器已经存有该文件(完全一样),就立马返回前端“文件已上传成功”。前端随即将进度条更新至100%。这样给用户的感觉就是“秒传”的感觉。对于每一个上传到服务......