SpringBoot自带的内部缓存的使用

文章目录

  • 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自带的内部缓存的使用_第1张图片

     可以看到SpringBoot支持多个注解的实现,会按照优先级或者指定的实现依次进行自动配置,如果没有额外的缓存实现,会使用默认的简单内存缓存实现  SimpleCacheConfiguration,其返回的缓存管理器是ConcurrentMapCacheManager 其内部维护了一个ConcurrentMap来实现缓存功能。

二、缓存的相关注解

@EnableCaching注解

@EnableCaching是由spring框架提供的,springboot框架对该注解进行了继承,该注解需要配置在类上(在SpringBoot中,通常配置在项目启动类上),用于开启基于注解的缓存支持

@Cacheable注解

@Cacheable注解也是由spring框架提供的,可以作用于类或方法(通常用在数据查询方法上),用于对方法结果进行缓存存储。注解的执行顺序是,先进行缓存查询,如果为空则进行方法查询,并将结果进行缓存;如果缓存中有数据,不进行方法查询,而是直接使用缓存数据
@Cacheable支持的属性
SpringBoot自带的内部缓存的使用_第2张图片
执行流程&时机

  1. 方法执行之前,先根据参数查询Cache,尝试按照cacheNames指定的名字获取缓存
  2. 如果未获取到缓存,则创建缓存
  3. 获取到缓存后,根据key的生成策略,在缓存中进行获取返回值。

常见的KeyGenerator
SpringBoot自带的内部缓存的使用_第3张图片

常用的SPEL表达式
SpringBoot自带的内部缓存的使用_第4张图片

@CachePut 更新缓存

  1. @CachePut 适用于更新数据的方法。目标方法执行完之后生效, @CachePut被使用于修改操作比较多,哪怕缓存中已经存在目标值了,但是这个注解保证这个方法依然会执行,执行之后的结果被保存在缓存中
  2. @CachePut注解也提供了多个属性,这些属性与@Cacheable注解的属性完全相同,除了不支持sync属性。
  3. 更新操作,前端会把id+实体传递到后端使用,我们就直接指定方法的返回值从新存进缓存时的key=“#id” , 如果前端只是给了实体,我们就使用 key=“#实体.id” 获取key. 同时,他的执行时机是目标方法结束后执行, 所以也可以使用 key=“#result.id” , 拿出返回值的id

@CacheEvict 删除缓存

@CacheEvict注解是由Spring框架提供的,可以作用于类或方法(通常用在数据删除方法上),该注解
的作用是删除缓存数据。@CacheEvict注解的默认执行顺序是,先进行方法调用,然后将缓存进行清除。

你可能感兴趣的:(SpringBoot,spring,boot,缓存,spring)