Spring Cache框架

1 介绍

Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。

Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如:

  • EHCache
  • Caffeine
  • Redis

2 基本知识

  1. 坐标
1
2
3
4
5
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
    <version>2.7.3</version>
</dependency>
  1. 常用注解
注解 说明
@EnableCaching 开启缓存注解功能,通常加在启动类上
@Cacheable 在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据;如果没有缓存数据,调用方法并将方法返回值放到缓存中
@CachePut 将方法的返回值放到缓存中
@CacheEvict 将一条或多条数据从缓存中删除

3 案例

  1. 导入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>
  1. 在启动类上加入@EnableCaching注解,开启缓存注解功能
1
2
3
4
5
6
7
@SpringBootApplication
@EnableCaching // 开启缓存功能
public class DemoApplication{
    public static void main() {
        SpringApplication.run(DemoApplication.class, args);
    }
}
  1. 在用接口XXXControllerxxxFunciton方法上加入@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") [1]key的值为xxx::user.iduser与函数参数一致 #p0标识第一个参数。此时参数可以写成#p0.id(或者#a0)。这种key命名格式可以让redis的数据呈现树形结果。
  • @Cacheable(cacheNames = "xxx", key = "#user.id") 参数含义与上面一致。
  • @CacheEvict(cacheNames = "xxx", key = "#user.id")参数与上面一致。特别的,@CacheEvict(cacheNames = "xxx", allEntries = true),将树形结构以xxx为根下面的键值对全部删除。

  1. 语法规则为Spring Expression Language(SpEL) 

updatedupdated2023-10-132023-10-13