一、Spring Cache简介
Spring Cache 是 Spring 框架提供的一个缓存抽象,实现了基于注解的缓存功能,它能够轻松地集成到 Spring 应用程序中,为方法调用的结果提供缓存支持,从而提高应用程序的性能和响应速度。
1.1spring Cache的常用注解
@EnableCaching 开启缓存注解功能,通常加在启动类上
@Cacheable 在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据,如果没有缓存数据,调用方法并将方法返回值放在缓存中
@CachePut 将方法的返回值放到缓存中
@CacheEvict 将一条或多条数据从缓存中删除
二、使用Spring Cache
2.1.添加Spring Cache的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
如果使用的是SpringBoot项目工程,是不需要添加Spring Cache的依赖的,SpringBoot已经自动集成了Spring Cache.
2.2用redis来使用Spring Cache
添加redis的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置redis的数据源
spring
redis:
host: localhost
port: 6379
database: 1
3.常用注解的使用
3.1@EnableCaching 开启缓存注解功能,通常加在启动类上
3.2@CachePut 将方法的返回值放到缓存中
这是一个添加用户信息的接口,我们可以通过@CachePut这个注解将这个接口的返回值添加到Redis缓存中。
属性
@CachePut(cacheNames = "userCache",key = "#user.id") //如果使用Spring Cache缓存数据,key的生成:userCache::user.id
cacheNames:它的作用和value是一样的,所以大家可以根据自己的习惯来二者选一。
key: 是指定缓存条目的键,用于唯一标识缓存中的条目,SpEL 表达式可以用于动态地生成键值。如果不指定 key,Spring Cache 将会使用默认的键生成策略来生成键值。
使用方法参数做为key的方法如下:
@PostMapping
// @CachePut(cacheNames = "userCache",key = "#user.id") //如果使用Spring Cache缓存数据,key的生成:userCache::user.id
//@CachePut(cacheNames = "userCache",key = "#result.id")//对象导航
// @CachePut(cacheNames = "userCache",key = "#p0.id")
// @CachePut(cacheNames = "userCache",key = "a0.id#")
// @CachePut(cacheNames = "userCache",key = "#root.args[0].id")
public User save(@RequestBody User user){
userMapper.insert(user);
return user;
}
3.3@Cacheable 在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据,如果没有缓存数据,调用方法并将方法返回值放在缓存中
这是一个根据用户的id,来查询用户基本信息的接口,首先在执行方法之前,会先查询Redis缓存中是否存在数据,如果有数据,则直接返回缓存中的数据,如果缓存中没有数据,在去调用方法,将查询到的返回的返回值存放到缓存中。
3.4@CacheEvict 将一条或多条数据从缓存中删除
这是一个根据用户id,来删除用户的基本信息,我们可以直接用@CacheEvict这个注解将此删除的用户在缓存中的数据也删除掉。
上面这个方法是通过方法中参数来删除一个或是多个缓存中的数据,我们也可以通过allEntries = true 这个属性,将key为UserCache的缓存全部删除。