1、首先springCache需要导入一下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
</dependency>

2、相关注解详解:

2.1、@Cacheable:

2.1.1 @Cacheable 属性:

  Cacheable 将方法的运行结果进行缓存;以后再要相同数据,直接找缓存中获取,不用再调用方法。
  CacheMananger:管理多个cache组件,对缓存的真正crud操作在Cache组件中,每一个缓存组件都有自己唯一的一个名字
  属性说明:
      cacheNames/value: 指定缓存组件的名字(即放到哪几个缓存中),是数组的方式,可以指定多个
      key: 缓存数据使用的key,可以用他指定,默认使用方法参数的值(可以使用spel表达式,如#id,就是参数id的值)
      keyGenerator: key的生成器,可以自己指定key的生成器的组件id
      (key和keyGenerator二选一)
      cacheManager: 指定缓存管理器 或者是指定缓存的解析器cacheResolver;
      condition: 指定符合条件的情况下才缓存,指定条件为true才缓存
      unless: 否定缓存(等同于除非),但unless指定的条件为true,方法的返回值就不会被缓存;(使用的时候可以获取到结果进行判断)
      sync: 是否使用异步模式。

2.1.2 @Cacheable 运行流程
  1、方法运行之前,先去查询cache(缓存组件),按照cacheNames指定的名字获取;
  (CacheManager先获取相应的缓存),第一次获取缓存,如果没有缓存组件会自动创建。
  2、去cache中查找缓存中的内容,使用一个key。默认是方法的参数
     (key是根据某种策略生成的,默认使用keyGenerator生成,也是 生成key)
     SimpleKeyGenerator生成key默认策略:
          如果没有参数,key = new SimpleKey()
          如果有一个参数,key = 参数的值
          如果有多个参数,key = new SimpleKey(params)
  3、没有查到就调用目标方法
  4、没有查到缓存就调用目标方法,将目标方法的结果返回并缓存

备注:@Cacheable标注的方法执行之前会先去查询缓存中有没有这个数据,默认是按照参数的值做为key去查询缓存,如果没有就运行方法,并将返回结果放入缓存

2.1.3 核心:

1、使用cacheManage(默认是ConcurrentMapCacheManager)按照名字得到Cache(默认是ConcurrentMapCache)组件

2、key是使用keyGenerator生成的,默认是SimpleKeyGenerator生成key

3、获取缓存,没有则创建缓存组件

2.2 、@CachePut

@CachePut 既调用方法,又更新缓存 修改数据数据库的同时又更新缓存

1、设置需要更新缓存组件名

2、设置需要更新的key(这里要与该缓存创建时使用的key生成策略一致,才能对对应更新缓存,否则无效),这里的key可以使用两种方式:

方式一:使用参数的形式 key = "#department.id"

方式二:使用返回值结果 key = "#result.参数名"
 其属性与@Cacheable相关属性相同
@Cacheable 不能使用#result,因为这个是返回结果才能使用,但是@Cacheable在执行方法前就要使用key,所以不行

2.3 、@CacheEvict

@CacheEvict  清除缓存

key: 指定清除数据的key值

cacheNames: 指定缓存组件名称

allEntries = true: 清除缓存组件下的所有数据(默认为false)

beforeInvocation = false: 是否在方法执行前清除缓存(默认是在方法执行之后清除缓存(即false),在方法执行之后清除缓存会出现方法报异常后,缓存不会清除)

beforeInvocation =true: 表示在方法执行之前就清除缓存,无论方法是否执行成功

2.4 、@Caching

@Caching 定义复杂的缓存规则

如:@Caching( cacheable = { @Cacheable(cacheNames = "department", key = "#id") }, put = { @CachePut(cacheNames = "department", key = "#departmentName") })

2.5 @CacheConfig

@CacheConfig全局定义缓存组件名、key生成策略、缓存管理器、缓存解析器

如全局定义缓存组件名:@CacheConfig(cacheNames = "department")

springCache注解详解相关推荐

  1. 26.SpringBoot事务注解详解

    转自:https://www.cnblogs.com/kesimin/p/9546225.html @Transactional spring 事务注解 1.简单开启事务管理 @EnableTrans ...

  2. mybatis注解详解

    mybatis注解详解 首 先当然得下载mybatis-3.0.5.jar和mybatis-spring-1.0.1.jar两个JAR包,并放在WEB-INF的lib目录下 (如果你使用maven,则 ...

  3. 开启注解缓存_Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解

    随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...

  4. spring-boot注解详解(一)

    spring-boot注解详解(一) @SpringBootApplication @SpringBootApplication = (默认属性)@Configuration + @EnableAut ...

  5. Spring零配置之@Configuration注解详解

    转载自 Spring零配置之@Configuration注解详解 @Configuration介绍 Spring3.0之前要使用Spring必须要有一个xml配置文件,这也是Spring的核心文件,而 ...

  6. Spring Boot注解详解

    文章目录 使用注解的优势 注解详解(配备了完善的释义) 注解列表如下 JPA注解 springMVC相关注解 全局异常处理 项目中具体配置解析和使用环境 使用注解的优势 采用纯java代码,不在需要配 ...

  7. 【SpringBoot 】SpringBoot注解详解

    [SpringBoot ]SpringBoot注解详解 一.注解(annotations)列表  @SpringBootApplication:包含了@ComponentScan.@Configura ...

  8. java method 注解_JAVA 注解详解及简单实例

    JAVA 注解详解及简单实例 何为注解 注解(Annotation)又称为元数据,在JDK1.5后引入,它的作用是: 生成文档  这是注解的原始用途,可以通过注解生成JavaDoc文档 跟踪代码的依赖 ...

  9. Java基础13:反射与注解详解

    Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...

最新文章

  1. kalivm 虚拟机访问win文件夹_利用vmware搭建属于自己的win虚拟环境
  2. 利用计算机提高数学课堂教学,计算机技术在数学课堂教学中的应用微探
  3. 计算机网络之传输层:5、TCP可靠传输
  4. IIS7.5 配置MVC3.0 伪静态,不能访问html伪静态页面
  5. C#获取网页内容的三种方式
  6. 【My Sft】彩色图像分析软件V1.0.1.0
  7. Hive实现笛卡尔积
  8. 第一章 spss入门
  9. 网络电视机顶盒的工作原理
  10. Excel——从文本中提取数字
  11. [英文邮件写作技巧] 表达感谢,提出问题,描述附件
  12. Python修改文件名
  13. VIN码识别-汽修行业新技术
  14. excel多元回归-系数参数解读
  15. Spring Cloud Gateway(二):Spring Cloud Gateway整合Eureka应用
  16. osx和linux系统这么像,使Linux操作系统看起来像macOS Mojave的方法
  17. 2022-1-13 向曾文正学修身之法
  18. 智汀家庭云与Home Assistant如何接入HomeKit,并连接米家设备
  19. 三层架构(UI、BLL、DAL)
  20. 力扣算法题,第N个神奇数字(Python)

热门文章

  1. 合肥内推 | 商汤智能车舱研发团队招聘计算机视觉算法实习生
  2. [在职软件工程]云计算基础教程
  3. 语音短信的几种应用场景
  4. 内网xshell传输文件命令_Xshell 传输文件
  5. js本地存储函数封装基于localStorage本地存储
  6. 调整虚拟机界面显示大小
  7. 基于51单片机有害气体浓度检测超限报警Proteus仿真
  8. 光模块/BOSA的基础介绍
  9. 非项目活动的时间怎么跟踪?
  10. 毕业设计 基于树莓派的智能家庭监控系统