主要注解
- @Cacheable 配置在方法上,可以根据方法对其结果进行缓存
- @CacheEvict 可以根据key进行对应缓存的清除
- @CachePut 调用方法的同时刷新缓存
- @EnableCaching 加载启动类开启基于注解的缓存
- @Caching 可以定义复杂的缓存
pom坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
@Cacheable注解
@Cacheable针对方法配置,可以根据方法的请求对其结果进行缓存
主要属性:
- cacheNames/value:缓存的名字,数组形式。
- key:缓存使用的key,需要唯一,可以编写SpEL表达式。
如:#id 参数id,#a0 #p0 第一个参数。 - keyGenerator:key生成器;不能与key同用。
- condition:指定符合条件的情况下才缓存;使用SpEl表达式。
如: condition = “#a0=1”:第一个参数的值等于1的时候才进行缓存 - unless:否定缓存;当unless指定的条件为true,方法的返回值就不会缓存。
- 如:unless = “#a0!=2”:如果第一个参数的值不是2,结果不缓存
- sunc: 是否使用异步。
@Cacheable(key = "'" + CacheConst.COURSE_ONE_PREFIX + "'+#id", cacheNames = CacheConfig.CacheNames.CACHE_30MINS)
public Course require(String id) {
return build(id);
}
@CachePut注解
属性与@Cacheable类似,但每次调用方法时会更新缓存。可以放在更改的方法上,更新数据并刷新缓存。
@CacheEvic注解
主要属性:
- key:要清除指定缓存的key。
- allEntries = true:指定清除这个缓存中所有的数据
- beforeInvocation = false:默认代表缓存清除操作是在方法执行之后执行
- beforeInvocation = true:代表清除缓存操作是在方法运行之前执行
@CacheEvict(key = "'" + CacheConst.COURSE_ONE_PREFIX + "'+#id", cacheNames = CacheConfig.CacheNames.CACHE_30MINS)
public void clearCache(String id) {
// clear cache
}
@Caching注解
用于组合复杂的缓存规则
@Caching(evict = {
@CacheEvict(key = "'" + CacheConst.COURSE_ONE_PREFIX + "'+#id", cacheNames = CacheConfig.CacheNames.CACHE_30MINS),
@CacheEvict(key = "'" + CacheConst.COURSE_ONE_BASE_PREFIX + "'+#id", cacheNames = CacheConfig.CacheNames.CACHE_30MINS),
@CacheEvict(key = "'" + CacheConst.LIVE_COURSE_ONE_PREFIX + "'+#id", cacheNames = CacheConfig.CacheNames.CACHE_30MINS)
})
public void clearCache(String id) {
// clear cache
}