1 介绍
Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。
Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如:
2 基本知识
- 坐标
1
2
3
4
5
|
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>2.7.3</version>
</dependency>
|
- 常用注解
注解 |
说明 |
@EnableCaching |
开启缓存注解功能,通常加在启动类上 |
@Cacheable |
在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据;如果没有缓存数据,调用方法并将方法返回值放到缓存中 |
@CachePut |
将方法的返回值放到缓存中 |
@CacheEvict |
将一条或多条数据从缓存中删除 |
3 案例
- 导入Spring Cache和Redis相关maven坐标
1
2
3
4
5
6
7
8
9
10
|
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
|
- 在启动类上加入
@EnableCaching
注解,开启缓存注解功能
1
2
3
4
5
6
7
|
@SpringBootApplication
@EnableCaching // 开启缓存功能
public class DemoApplication{
public static void main() {
SpringApplication.run(DemoApplication.class, args);
}
}
|
- 在用接口
XXXController
的xxxFunciton
方法上加入@Cacheable
注解
1
2
3
4
5
6
7
8
|
@RestController
@RequestMapping("/Demo")
public class xxxController{
@Cacheable(cacheNames = "CacheName", key = "#user.id")
public Result xxxFunciton(User user) {
return Result.success(user);
}
}
|
4 注解参数
@CachePut(cacheNames = "xxx", key = "#user.id")
key的值为xxx::user.id
,user
与函数参数一致 #p0
标识第一个参数。此时参数可以写成#p0.id
(或者#a0
)。这种key命名格式可以让redis的数据呈现树形结果。
@Cacheable(cacheNames = "xxx", key = "#user.id")
参数含义与上面一致。
@CacheEvict(cacheNames = "xxx", key = "#user.id")
参数与上面一致。特别的,@CacheEvict(cacheNames = "xxx", allEntries = true)
,将树形结构以xxx
为根下面的键值对全部删除。