Spring Boot集成Redis Cache
从 Spring3 开始定义 Cache 和 CacheManager 接口来统一不同的缓存技术; Cache 接口为缓存的组件规范定义,包含缓存的各种操作集合; Cache 接口下 Spring 提供了各种缓存的实现; 如 RedisCache,EhCacheCache ,ConcurrentMapCache 等;
1. 核心 API
- Cache
缓存接口,定义缓存操作。实现有:RedisCache、EhCacheCache、ConcurrentMapCache 等 - CacheManager
缓存管理器,管理各种缓存(cache)组件
1.1 @Cacheable
主要针对方法配置,能够根据方法的请求参数对其进行缓存,Cacheable 执行流程:
- 方法运行之前,按照 cacheNames 指定的名字先去查询 Cache 缓存组件
- 第一次获取缓存如果没有 Cache 组件会自动创建
- Cache 中查找缓存的内容,使用一个 key,默认就是方法的参数
- key 是按照某种策略生成的;默认是使用 keyGenerator 生成的,这里使用自定义配置
- 没有查到缓存就调用目标方法;
- 将目标方法返回的结果,放进缓存中
@Cacheable 注解属性
- cacheNames/value:指定方法返回结果使用的缓存组件的名字,可以指定多个缓存key:缓存数据使用的 keykey/keyGenerator:key 的生成器,可以自定义
- cacheManager:指定缓存管理器
- cacheResolver:指定缓存解析器
- condition:指定符合条件的数据才缓存
- unless:否定缓存;当 unless 指定的条件为 true,方法的返回值就不会被缓存sync:是否使用异步模式
1.2 @CacheEvict
清除缓存
- CacheEvict:缓存清除
- key:指定要清除的数据
- allEntries = true:指定清除这个缓存中所有的数据
- beforeInvocation = false:方法之前执行清除缓存,出现异常不执行
- beforeInvocation = true:代表清除缓存操作是在方法运行之前执行,无论方法是否出现异常,缓存都清除
1.3 @CachePut
保证方法被调用,又希望结果被缓存。 与@Cacheable 区别在于是否每次都调用方法,常用于更新,写入。
CachePut:执行方法且缓存方法执行的结果,修改了数据库的某个数据,同时更新缓存;执行流程:
- 先调用目标方法
- 然后将目标方法的结果缓存起来t
1.4 @EnableCaching
开启基于注解的缓存
1.5 keyGenerator
缓存数据时 key 生成策略
1.6 @CacheConfig
统一配置本类的缓存注解的属性
2.项目实战
2.1 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.2 配置Redis
在application.yml配置一下内容
spring:
redis:
host: 192.168.174.100
port: 6379
database: 0
password:
timeout: 1000
jedis:
pool:
max-active: 200
max-wait: -1
max-idle: 10
min-idle: 0
cache:
type: redis
2.3 启动启动类注解开启 Cache
@SpringBootApplication
@EnableCaching //开启缓存
public class RedisApplication {
public static void main(String[] args) {
SpringApplication.run(RedisApplication.class, args);
}
}
2.4 实现及测试
分别对上述的注解进行测试,使用postman。