文章目录
- SpringBoot缓存介绍
- 一、缓存基本使用
- 1、开启缓存@EnableCaching
- 2、使用缓存@Cacheable(cacheNames = "comment")
- 3、默认缓存实现 SimpleCacheConfiguration
- 二、缓存的相关注解
- @EnableCaching注解
- @Cacheable注解
- @CachePut 更新缓存
- @CacheEvict 删除缓存
SpringBoot缓存介绍
Spring框架支持透明的想应用程序添加缓存和管理缓存,核心作用就是对需要操作数据的方法进行缓存,减少操作数据的执行次数,同时不对程序本身造成任何干扰。Spring Boot继承了Spring框架的缓存管理功能,通过使用@EnableCaching注解开启基于注解的缓存支持,Spring Boot就可以启动缓存管理的自动化配置。
对于整合redis缓存的使用,和自动配置说明 可以参考这篇博文 SpringBoot整合Redis缓存
一、缓存基本使用
1、开启缓存@EnableCaching
在SpringBoot启动类上,增加注解@EnableCaching 开启Spring Boot基于注解的缓存管理支持
@EnableCaching // 开启Spring Boot基于注解的缓存管理支持
@SpringBootApplication
public class Springboot04CacheApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot04CacheApplication.class, args);
}
}
2、使用缓存@Cacheable(cacheNames = “comment”)
// 根据评论id查询评论信息
@Cacheable(cacheNames = "comment")
public Comment findById(int comment_id){
Optional<Comment> optional = commentRepository.findCommentById(comment_id);
if(optional.isPresent()){
return optional.get();
}
return null;
}
上述代码中,在service类的一个查询方法上,添加缓存注解@Cacheable,该注解的作用是对查询结果Comment存放在SpringBoot的默认缓存中,并且名称为 “comment”的命名空间中,对应缓存唯一标识。并且缓存数据的唯一主键,对应为方法参数 comment_id的值。
3、默认缓存实现 SimpleCacheConfiguration
可以看到SpringBoot支持多个注解的实现,会按照优先级或者指定的实现依次进行自动配置,如果没有额外的缓存实现,会使用默认的简单内存缓存实现 SimpleCacheConfiguration,其返回的缓存管理器是ConcurrentMapCacheManager 其内部维护了一个ConcurrentMap来实现缓存功能。
二、缓存的相关注解
@EnableCaching注解
@EnableCaching是由spring框架提供的,springboot框架对该注解进行了继承,该注解需要配置在类上(在SpringBoot中,通常配置在项目启动类上),用于开启基于注解的缓存支持
@Cacheable注解
@Cacheable注解也是由spring框架提供的,可以作用于类或方法(通常用在数据查询方法上),用于对方法结果进行缓存存储。注解的执行顺序是,先进行缓存查询,如果为空则进行方法查询,并将结果进行缓存;如果缓存中有数据,不进行方法查询,而是直接使用缓存数据
@Cacheable支持的属性
执行流程&时机
- 方法执行之前,先根据参数查询Cache,尝试按照cacheNames指定的名字获取缓存
- 如果未获取到缓存,则创建缓存
- 获取到缓存后,根据key的生成策略,在缓存中进行获取返回值。
常见的KeyGenerator
常用的SPEL表达式
@CachePut 更新缓存
- @CachePut 适用于更新数据的方法。目标方法执行完之后生效, @CachePut被使用于修改操作比较多,哪怕缓存中已经存在目标值了,但是这个注解保证这个方法依然会执行,执行之后的结果被保存在缓存中
- @CachePut注解也提供了多个属性,这些属性与@Cacheable注解的属性完全相同,除了不支持sync属性。
- 更新操作,前端会把id+实体传递到后端使用,我们就直接指定方法的返回值从新存进缓存时的key=“#id” , 如果前端只是给了实体,我们就使用 key=“#实体.id” 获取key. 同时,他的执行时机是目标方法结束后执行, 所以也可以使用 key=“#result.id” , 拿出返回值的id
@CacheEvict 删除缓存
@CacheEvict注解是由Spring框架提供的,可以作用于类或方法(通常用在数据删除方法上),该注解的作用是删除缓存数据。@CacheEvict注解的默认执行顺序是,先进行方法调用,然后将缓存进行清除。