spring缓存(EhCache)是在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")@Overridepublic Student findById(Long id) {return studentMapper.findById(id);}

@CachePut

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

@CachePut(value = "student",key = "#student.id")@Overridepublic 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: ehcacheehcache: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,那么点击两次的情况下,我们只进入了方法一次。

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

更多java高级学习课程资料小编已经整理打包好!有兴趣想要学习的小伙伴点赞私信回复学习即可免费领取!

原文出处:SpringBoot-缓存Ehcache的使用-51CTO.COM

SpringBoot-缓存Ehcache的使用相关推荐

  1. spring boot学习(十三)SpringBoot缓存(EhCache 2.x 篇)

    SpringBoot 缓存(EhCache 2.x 篇) SpringBoot 缓存 在 Spring Boot中,通过@EnableCaching注解自动化配置合适的缓存管理器(CacheManag ...

  2. springboot 缓存ehcache的简单使用

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 步骤: 1. pom文件中加 maven jar包: <!-- ehcache 缓存 --&g ...

  3. springboot+mybatis集成自定义缓存ehcache用法笔记

    今天小编给大家整理了springboot+mybatis集成自定义缓存ehcache用法笔记,希望对大家能有所办帮助! 一.ehcache介绍 EhCache 是一个纯Java的进程内缓存管理框架,属 ...

  4. SpringBoot集成Cache缓存(Ehcache缓存框架,注解方式)

    1.说明 Spring定义了CacheManager和Cache接口, 用来统一不同的缓存技术, 例如JCache,EhCache,Hazelcast,Guava,Redis等. 本文通过Spring ...

  5. springboot整合ehcache+redis实现双缓存

    在一些对并发业务要求较高的场景下,对页面数据的响应是个急需解决的问题,对后端来说,ehcache+redis实现双缓存是解决这一问题的不错思路,而且在不少的电商项目中得到了很好的验证,但我在网上搜寻资 ...

  6. Springboot缓存实战笔记之概念篇

    看过好多博客,在介绍Springboot缓存时,直接讲解使用,第一步把冰箱门打开...之类的,并没有对缓存概念做一些常规介绍,任何技术首先要做的就是去了解概念,本篇基于我自身阅读过的一些书籍,自身觉得 ...

  7. springboot整合ehcache使用

    springboot整合ehcache使用 其实本地缓存的解决方案也有很多种,像Ehcache,GuavaCache,JCache等目前Ehcache 是现在最流行的纯Java开源缓存框架,配置简单. ...

  8. SpringBoot缓存管理(二) 整合Redis缓存实现

    SpringBoot支持的缓存组件 觅波小说网 https://www.3812.info 在SpringBoot中,数据的缓存管理存储依赖于Spring框架中cache相关的org.springfr ...

  9. 搭建第一个SpringBoot工程;SpringBoot整合mybatis;SpringBoot整合Redis-cluster集群;SpringBoot整合EhCache;

    写在前头,以下内容主要是为了自己复习之用,如果你有幸看到这篇文章,请不要嫌弃某些地方有所跳跃或省略. 1. 搭建第一个SpringBoot工程 1.1 创建工程 1.2 初始pom.xml文件内容 1 ...

  10. java 项目做多级缓存_【开源项目系列】如何基于 Spring Cache 实现多级缓存(同时整合本地缓存 Ehcache 和分布式缓存 Redis)...

    一.缓存 当系统的并发量上来了,如果我们频繁地去访问数据库,那么会使数据库的压力不断增大,在高峰时甚至可以出现数据库崩溃的现象.所以一般我们会使用缓存来解决这个数据库并发访问问题,用户访问进来,会先从 ...

最新文章

  1. Arm v9的牙膏挤出来了,超大核机器学习性能x2,小核4年来终于更新
  2. 赴美工作常识(Part 4 - 面试)
  3. tps 数据库写并发衡量_MPP数据库简介
  4. 解决Windows安装TensorFlow报错:ERROR: Cannot uninstall 'wrapt'问题
  5. opencv立方体的画法_用opengl立方体的画法
  6. java虚拟机工作原理_Java虚拟机工作原理具体解释
  7. 层级分类(续)-使用B-CNN(Branch CNN)实现
  8. 我的家乡介绍网站设计与实现
  9. Docker日志查看命令
  10. 如何给网页添加icon图标?
  11. 0016_光源和打光(1)
  12. solidity-msg.sender到底是什么?
  13. 010❤Anaconda的安装及使用方法
  14. 计算机表格公开课,Word表格制作教案公开课
  15. python3下的webpy运行详解——webpy,session,cookie
  16. 第七期 | 网约车司机的“捞偏门”手段:作弊抢单、空跑刷单
  17. 如何在 Python 中将 Excel 文件转换为图像?Aspose快速搞定
  18. foobar_Foobar挑战:Google对开发人员的隐藏测试
  19. Redis的数据过期清除策略 与 内存淘汰策略
  20. 按QQ查询QQ群数据库的方法

热门文章

  1. 21. 合并两个有序链表
  2. 玩转Excel快捷键和常用函数和图表,赶紧学起来
  3. Python 文本处理的几个库
  4. android接入华为推送,华为推送
  5. 小程序倒计时实现方法
  6. 安卓改机,改串的研究
  7. 怎么制作自己的压缩软件
  8. GoAhead学习之GoForms
  9. 计算机修改桌面图标大小,windows更改桌面图标大小设置
  10. 企业园区网IPv6地址规划方案与应用