fengzf的gravatar头像
fengzf2019-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下载
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友