springCache注解详解
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注解详解相关推荐
- 26.SpringBoot事务注解详解
转自:https://www.cnblogs.com/kesimin/p/9546225.html @Transactional spring 事务注解 1.简单开启事务管理 @EnableTrans ...
- mybatis注解详解
mybatis注解详解 首 先当然得下载mybatis-3.0.5.jar和mybatis-spring-1.0.1.jar两个JAR包,并放在WEB-INF的lib目录下 (如果你使用maven,则 ...
- 开启注解缓存_Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解
随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...
- spring-boot注解详解(一)
spring-boot注解详解(一) @SpringBootApplication @SpringBootApplication = (默认属性)@Configuration + @EnableAut ...
- Spring零配置之@Configuration注解详解
转载自 Spring零配置之@Configuration注解详解 @Configuration介绍 Spring3.0之前要使用Spring必须要有一个xml配置文件,这也是Spring的核心文件,而 ...
- Spring Boot注解详解
文章目录 使用注解的优势 注解详解(配备了完善的释义) 注解列表如下 JPA注解 springMVC相关注解 全局异常处理 项目中具体配置解析和使用环境 使用注解的优势 采用纯java代码,不在需要配 ...
- 【SpringBoot 】SpringBoot注解详解
[SpringBoot ]SpringBoot注解详解 一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configura ...
- java method 注解_JAVA 注解详解及简单实例
JAVA 注解详解及简单实例 何为注解 注解(Annotation)又称为元数据,在JDK1.5后引入,它的作用是: 生成文档 这是注解的原始用途,可以通过注解生成JavaDoc文档 跟踪代码的依赖 ...
- Java基础13:反射与注解详解
Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...
最新文章
- kalivm 虚拟机访问win文件夹_利用vmware搭建属于自己的win虚拟环境
- 利用计算机提高数学课堂教学,计算机技术在数学课堂教学中的应用微探
- 计算机网络之传输层:5、TCP可靠传输
- IIS7.5 配置MVC3.0 伪静态,不能访问html伪静态页面
- C#获取网页内容的三种方式
- 【My Sft】彩色图像分析软件V1.0.1.0
- Hive实现笛卡尔积
- 第一章 spss入门
- 网络电视机顶盒的工作原理
- Excel——从文本中提取数字
- [英文邮件写作技巧] 表达感谢,提出问题,描述附件
- Python修改文件名
- VIN码识别-汽修行业新技术
- excel多元回归-系数参数解读
- Spring Cloud Gateway(二):Spring Cloud Gateway整合Eureka应用
- osx和linux系统这么像,使Linux操作系统看起来像macOS Mojave的方法
- 2022-1-13 向曾文正学修身之法
- 智汀家庭云与Home Assistant如何接入HomeKit,并连接米家设备
- 三层架构(UI、BLL、DAL)
- 力扣算法题,第N个神奇数字(Python)