使用 Spring Cache 框架需要进行相应的依赖配置。在 Spring Boot 中,可以通过 Maven 或者 Gradle 等构建工具来导入相应的依赖包。 先在启动类上使用 @EnableCaching
注解来启用 Spring 的注解驱动缓存管理功能。
在SpringCache中提供了很多缓存操作的注解,常见的是以下的几个:
注解 | 说明 |
---|---|
@EnableCaching | 开启缓存注解功能,通常加在启动类上 |
@Cacheable | 在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据;如果没有缓存数据,调用方法并将方法返回值放到缓存中 |
@CachePut | 将方法的返回值放到缓存中 |
@CacheEvict | 将一条或多条数据从缓存中删除 |
@Cacheable
: 该注解可以标注在方法上,表明该方法的返回值可以被缓存。当一个被@Cacheable
注解的方法被调用时,Spring 会首先检查缓存中是否存在相应的数据,如果存在则直接返回缓存的数据,否则会执行方法中的代码,并将返回结果放入缓存中。它支持以下属性:
(1) value:指定使用的缓存名称,多个缓存名称可以用逗号隔开。
(2) key:指定缓存的 key 值。其中 SpEL 表达式可以用来计算 key,比如 "#param"
表示使用方法中的 param
参数作为 key。
(3) condition:指定缓存的条件,只有满足该条件的方法调用才会缓存。例如:condition = "#result != null"
表示只有当方法返回结果不为 null 时才缓存该结果。
示例代码:
/**
* condition:条件,满足条件时才缓存数据
* unless:满足条件则不缓存
*/
@Cacheable(value = "userCache", key = "#userId")
public User getUserById(int userId) {
//从数据库中查询用户
User user = userDao.getUserById(userId);
if (user == null) {
//抛出异常或者返回错误信息
throw new RuntimeException("User not exist");
}
return user;
}
@CachePut
: 该注解可以标注在方法上,用于更新缓存。与 @Cacheable
注解不同的是,@CachePut
注解标注的方法总是会被执行,并将方法的返回值更新到缓存中。它支持以下属性:
(1) value:缓存的名称。
(2) key:缓存的 key 值。
(3) condition:更新缓存的条件,只有满足该条件的方法调用才会更新缓存。
示例代码:
@CachePut(value = "userCache", key="#user.id")
public User updateUser(User user) {
userDao.update(user);
return user;
}
@CacheEvict
: 该注解可以标注在方法上,用于删除缓存。一般用于在更新或者删除操作后清空缓存,避免脏数据和脏缓存的问题。它支持以下属性:
(1) value:缓存的名称。
(2) key:缓存的 key 值。
(3) condition:删除缓存的条件,只有满足该条件的方法调用才会删除缓存。
示例代码:
@CacheEvict(value = "userCache", key = "#userId")
public void deleteUserById(int userId) {
userDao.deleteUserById(userId);
}