悟道子的gravatar头像
悟道子 2019-01-10 16:36:22

Spring Boot中Cache缓存的使用

项目描述       

使用Springboot Cache可以有效的降低数据库压力,提升整个系统的相应效率和并发量。

     一般的使用思路是:如果缓存中存在数据就从缓存中取数据,如果缓存中不存在数据就从数据库中读取。

     实现原理:  利用了Spring AOP的动态代理技术,在项目启动的时候动态生成代理类,实现对应的逻辑。

运行环境

jdk8+mysql+IntelliJ IDEA+maven

项目技术(必填)

Springboot+mybatis+redis

数据库文件

Spring Boot中Cache缓存的使用

是否原创

项目结构图

Spring Boot中Cache缓存的使用

运行截图

     Spring Boot使用Cache具体实现:

第一步:引入spring-boot-starter-cache包

Spring Boot中Cache缓存的使用

第二步:在Spring Boot主类中增加@EnableCaching注解开启缓存功能,这一步很关键,否则缓存不起作用。

Spring Boot中Cache缓存的使用

第三步:使用@Cacheable注解用来声明方法是可缓存的,将结果存储到缓存中后续调用同一个方法不需要执行实际的方法,直接从缓存中取值。@Cacheable 可以标记的方法上,也可以标记在一个类上,@Cacheable标记的方法上表示该方法支持缓存,标记在一个类上表示该类的所有方法都支持缓存。

Spring Boot中Cache缓存的使用

helloCache可以理解成缓存中的key值,同一个参数第一次访问时走的是方法,往后走的都是缓存。可以打个断点Debug模式测试一下 测试:http://localhost:8080/hello?name=王二,第一次断点走到了

Spring Boot中Cache缓存的使用

控制台打印出

Spring Boot中Cache缓存的使用

然后clear一下控制台,刷新一下请求发现没有走断点,很快就得到结果,没有走断点,控制台也没有输出。

重新改变一下参数,返现又重新走了方法

Spring Boot中Cache缓存的使用

@Cacheable 支持如下几个参数。

  • value:缓存的名称。
  • key:缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写;如果不指定,则缺省按照方法的所有参数进行组合。
  • condition:触发条件,只有满足条件的情况才会加入缓存,默认为空,既表示全部都加入缓存,支持 SpEL。Spring Boot中Cache缓存的使用

启动后在浏览器中输入网址 http://localhost:8080/condition?name=abc,第一次输出栏输出:没有走缓存!再次执行无输出,表明已经走缓存。在浏览器中输入网址http://localhost:8080/condition?name=abcde,浏览器执行多次仍然一直输出:没有走缓存!说明条件 condition 生效。

整合mybatis从数据库中取数据然后缓存

Spring Boot中Cache缓存的使用

运行结果,断点试试,多次刷新看看走没走方法,并用下边的@CacheEvict所注解的方法清除缓存再试试

Spring Boot中Cache缓存的使用

@CachePut

标注的方法在执行前,不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。

@CachePut 配置方法

  • value 缓存的名称。
  • key 缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合。
  • condition 缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存。

可以看出 @CachePut 的参数和使用方法基本和 @Cacheable 一致。

@CachePut 也可以标注在类上和方法上。

@CacheEvict

是用来标注在需要清除缓存元素的方法或类上的,当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。@CacheEvict 可以指定的属性有 value、key、condition、allEntries 和 beforeInvocation,其中 value、key 和 condition 的语义与 @Cacheable 对应的属性类似。

即 value 表示清除操作是发生在哪些 Cache 上的(对应 Cache 的名称);key 表示需要清除的是哪个 key

Spring Boot中Cache缓存的使用

allEntries 属性

allEntries 是 boolean 类型,表示是否需要清除缓存中的所有元素,默认为 false,表示不需要。当指定了 allEntries 为 true 时,Spring Cache 将忽略指定的 key,有的时候我们需要 Cache 一下清除所有的元素,这比一个一个清除元素更有效率。

beforeInvocation 属性

清除操作默认是在对应方法成功执行之后触发的,即方法如果因为抛出异常而未能成功返回时也不会触发清除操作。使用 beforeInvocation 可以改变触发清除操作的时间,当我们指定该属性值为 true 时,Spring 会在调用该方法之前清除缓存中的指定元素。

Spring Boot中Cache缓存的使用


打赏

文件名:springboot-cache.zip,文件大小:119.03K 下载
最代码最近下载分享源代码列表最近下载
zaizai21312  LV10 2020年6月12日
wsx456521  LV10 2020年4月27日
annazhang  LV29 2019年9月17日
cqm0609  LV13 2019年4月30日
爱你分享2  LV8 2019年4月18日
z_yong76  LV26 2019年4月11日
zhanghuohuo  LV19 2019年4月2日
start111  LV9 2019年3月25日
dagf113225  LV68 2019年2月25日
solo2018  LV8 2019年2月22日
最代码最近浏览分享源代码列表最近浏览
edpwyg  LV14 7月28日
漫步的海星  LV4 2023年9月26日
zxc131313  LV12 2023年5月17日
11155都  LV1 2022年12月20日
Start1  LV15 2022年4月24日
羊咩咩LY 2021年11月22日
暂无贡献等级
ᯤ⁵²¹ᴳ⁺  LV8 2021年10月11日
hellosking  LV4 2021年9月25日
11112323 2021年9月18日
暂无贡献等级
kinggode  LV14 2021年7月29日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友