内容纲要
介绍
Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。
其提供了一层抽象,底层可以切换不同的缓存实现,例如:
- EHCache
- Caffeine
- Redis(常用)
在spring boot项目中,使用缓存技术只需在项目中导入相关缓存技术的依赖包,并在启动类上使用@EnableCaching
开启缓存支持即可。例如,使用Redis
作为缓存技术,只需要导入Spring data Redis
的maven坐标即可。
导入maven坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>2.7.3</version>
</dependency>
常用注解
注解 | 说明 |
---|---|
@EnableCaching | 开启缓存注解功能,通常加在启动类上 |
@CachePut | 将方法的返回值放到缓存中 |
@Cacheable | 在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据;如果没有缓存数据,调用方法并将方法返回值放到缓存中 |
@CacheEvict | 将一条或多条数据从缓存中删除 |
使用介绍
1.@EnableCaching
加在SpringBoot启动类上,代表项目使用SpringCache进行缓存功能的实现。
2.@CachePut
加在方法上,代表将方法的返回值放到缓存中,基本格式:@CachePut(cacheNames:"#{cacheNames}",key="#{key}")
,生成的key键:cacheNames::key
#{cacheNames}
:存入Redis后其键名的前半部分。#{key}
:存入Redis后其键名的后半部分。这里可以使用SpringEL语法动态规定后半部分键名的值,用来对键加以区分。
3.@Cacheable
加在方法上,在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据;如果没有缓存数据,调用方法并将方法返回值放到缓存中,基本格式:@Cacheable(cacheNames:"#{cacheNames}",key="#{key}")
,生成的key键:cacheNames::key
4.@CacheEvict
加在方法上,代表将一条或多条数据从缓存中删除。
- 删除单条数据:
@CacheEvict(cacheNames:"#{cacheNames}",key="#{key}")
- 删除所有数据:
@CacheEvict(cacheNames:"#{cacheNames}",allEntries=true)
{key}中使用SpringEL(Spring Expression Language)案例
//样例代码
@PostMapping
@CachePut(value = "userCache", key = "#user.id")
public User save(@RequestBody User user){
userMapper.insert(user);
return user;
}
#{key}的写法说明如下:
#user.id
:#user
指的是方法形参的名称,id
指的是user
的id
属性 , 也就是使用user
的id
属性作为key
。#result.id
:#result
代表方法返回值,该表达式 代表以返回对象的id
属性作为key
。(@Cacheable
注解不可用)#p0.id
:#p0
指的是方法中的第一个参数,id
指的是第一个参数的id
属性,也就是使用第一个参数的id
属性作为key
。#a0.id
:#a0
指的是方法中的第一个参数,id
指的是第一个参数的id
属性,也就是使用第一个参数的id
属性作为key
。#root.args[0].id
:#root.args[0
]指的是方法中的第一个参数,id
指的是第一个参数的id
属性,也就是使用第一个参数的id
属性作为key
。