zl程序教程

您现在的位置是:首页 >  后端

当前栏目

解决springboot中@ehcache不起作用的问题

SpringBoot 解决 EhCache 不起作用 问题
2023-09-27 14:22:13 时间

一 问题描述

问题描述前,请允许我,吐槽一下,这个问题困扰了一天,下面在业务层下的代码中,@cache注解标注了value的名称,但是没有设置key,且传递的参数为

CrawlRecordParamVo crawlRecordParamVo ,是一个对象,每次调用都要查询一次数据库,没有启动缓存的作用

原因在于没有制定key,因为:对于使用@Cacheable标注的方法,Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行此方法从数据库中拿到,并将返回结果存入指定的缓存中。

二 解决办法

1.思想:将对象bean中查询的属性字段,通过md5加密生成一个字符串,作为一个唯一的主键,如在下图对象bean中定义uuid

2.将对象中作为查询条件的字段,通过md5加密:这样保证本次,以及上次的查询条件没有修改的话,这些查询条件生成的md5字符串是一样,也就是key是一样,则直接从缓存中拿到数据,否则查询条件有改动,如查询日期改了,则这些查询条件生成的md5串也就发生改变,这时候的key就是新key,就会重新查询数据库,进行返回并将结果缓存到缓存中。

3.在缓存的注解标注的方法上,设置   CrawlRecordParamVo对象中uuid主键

4.测试

通过页面调用,查询看到console显示:第一次查询了数据库,将结果存入缓存中,后面多次点击查询,走到controller后,直接从缓存中拿到数据。不再执行service层的

public Map<String,Object> exportCrawlRecordInfoList(CrawlRecordParamVo crawlRecordParamVo) 

这个方法了。

修改一下pageSize的值,再次查询

通过控制台日志看到:修改pagesize之后(12变为10),就执行了一次查询数据库,后面都是从缓存中直接取得的结果。

二 案例2

2.1 业务层

 2.2 javabean

 2.3  调试

 2.4 调试