目录
- 一、前言
- 二、什么是Spring Cache?
- 三、Spring Cache常用注解
- 四、使用方法
- 1.导入依赖
- 2.开启缓存注解
- 3.@Cacheables
- 4.@CachePut
- 5.@CacheEvict
- 6.@Caching
一、前言
在日常开发工作中,缓存是一个很常见的技术手段,它可以有效地提高系统性能。当系统对数据的读取操作远大于写入操作的时候,往往我们会使用缓存来暂时存储热点数据,降低直接访问持久化存储的次数,从而减轻数据库的压力。
本文将介绍Spring Cache这个库,以及如何在项目中使用它。
二、什么是Spring Cache?
- Spring Cache是Spring提供的一套缓存抽象功能,它通过注解的方式,让我们可以很方便地在应用中添加缓存。它支持多种缓存实现,如:EhCache、Redis、Guava Cache。
- 在 Spring 框架中,Spring Cache 提供了一种简洁、易用的缓存机制,让您可以专心地编写业务代码,而不必关心缓存的管理和维护
针对不同的缓存技术需要实现不同的CacheManager:
三、Spring Cache常用注解
注解 | 说明 |
---|---|
@EnableCaching | 开启缓存注解功能 |
@Cacheable | 使用该注解的方法在执行前,先将方法的参数作为 key 去缓存中查找,如果缓存中存在该 key,则直接返回对应的结果;否则,执行该方法,并将结果存储到缓存中 |
@CachePut | 使用该注解的方法总是会执行,并将其结果存储到缓存中。这个注解常用于更新缓存。 |
@CacheEvict | 使用该注解的方法会从缓存中移除指定的数据 |
@Caching | 这个注解用于组合以上三种注解,可以在一个方法中同时使用多个缓存注解。 |
四、使用方法
配置spring Cache
1.导入依赖
<!-- Spring Cache -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置application.yml文件
spring:
cache:
redis:
time-to-live: 1800000 #设置缓存数据过期时间
2.开启缓存注解
在启动类上添加@EnableCaching注解
@SpringBootApplication
@EnableCaching//开启缓存注解功能
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
3.@Cacheables
value代表一类缓存的名称,key是一类缓存中的每个值对应的键
@Cacheable(value = "users", key = "#id")
public User findUserById(Long id) {
// 数据库查询操作
return userRepository.findById(id);
}
4.@CachePut
@CachePut(value = "users", key = "#user.id")
public User updateUser(User user) {
// 更新数据库操作
userRepository.update(user);
return user;
}
5.@CacheEvict
@CacheEvict(value = "users", key = "#id")
public void deleteUser(Long id) {
// 删除数据库操作
userRepository.delete(id);
}
6.@Caching
@Caching(
put = @CachePut(value = "users", key = "#user.id"),
evict = @CacheEvict(value = "users", key = "#user.oldId")
)
public User updateUserWithNewId(User user) {
// 更新数据库操作
userRepository.update(user);
// 删除用户老 ID 的操作
userRepository.delete(user.getOldId());
return user;
}