spring关于缓存的注解使用@CacheConfig,@Cacheable,@CachePut,@CacheEvict,@Caching
总述目前的spring boot项目使用到了redis缓存,再次记录一下关于缓存的注解主要用到的是这四个import org.springframework.cache.annotation.CacheConfig;import org.springframework.cache.annotation.CacheEvict;import org.springframework.cache.anno
·
总述
目前的spring boot项目使用到了redis缓存,再次记录一下关于缓存的注解
主要用到的是这四个
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.cache.annotation.CachePut;
@CacheConfig,@Cacheable,@CachePut,@CacheEvict,@Caching
@CacheConfig
提供一种在类级别共享公共缓存相关设置的机制。
{@code @CacheConfig}
provides a mechanism for sharing common cache-related settings at the class level.
这个注解写在类上,主要作用是抽取缓存方法的公共属性
主要属性有:
- 缓存名称:cacheNames,对应value或者cacheNames
- 缓存管理器名称:cacheManager,对应cacheManager
- KeyGenerator的名称集合:keyGenerator,对应keyGenerator
示例如下
@CacheConfig(cacheNames = CachingConfig.CacheName.CACHE_NAME,
cacheManager = CachingConfig.CacheManagerName.REDIS_CACHE_MANAGER,
keyGenerator = CachingConfig.KeyGeneratorNames.CONFIG_KEY_GENERATOR)
@Component
@Slf4j
public class RedisAccessCacheImpl implements RemoteAccessCache {
}
@Cacheable
放置在方法上,表示可以将结果放入缓存
Annotation indicating that the result of invoking a method
(or all methods in a class) can be cached.
主要属性有:
- 键名:key,可以为空,可使用 SpEL 表达式编写,如果为空,则按照方法的所有参数进行组合
- 缓存条件:condition,可以为空,使用 SpEL 编写,返回 true 或 false,为 true 才进行缓存
- 缓存名称:value,可集体抽取为@CacheConfig的cacheNames,或者单独写,必填
示例如下
@Cacheable(key = "'getObsToken_'+ #name")
public TokenVO getToken(String name) {
return getObsToken.getToken(name);
}
@CachePut
与@Cacheable基本相同
区别是
- @CachePut:这个注释可以确保方法被执行,同时方法的返回值也被记录到缓存中。
- @Cacheable:当重复使用相同参数调用方法时,方法本身不会被调用,而是直接从缓存中找到结果并返回。
- 也就是说@Cacheable一次缓存,不再更新。@CachePut次次缓存,一直更新
@CacheEvict
放置在方法上,可以按照条件清除缓存
Annotation indicating that a method (or all methods on a class) triggers a
{@link org.springframework.cache.Cache#evict(Object) cache evict} operation
主要属性有:
- 键名:key,可以为空,可使用 SpEL 表达式编写,如果为空,则按照方法的所有参数进行组合
- 缓存条件:condition,可以为空,使用 SpEL 编写,返回 true 或 false,为 true 才进行缓存
- 缓存名称:value,可集体抽取为@CacheConfig的cacheNames,或者单独写,必填
- 是否清空所有缓存:allEntries,缺省为 false,指定为 true
- 是否在方法执行前就清空:beforeInvocation,缺省为 false,指定为 true
示例如下
@CacheEvict(key = "'findByBatchId_'+ #detailId + '_' + #batchId ")
public void updateByBatchId(Long detailId, String batchId) {
batchHistoryRepository.updateByBatchId(detailId,batchId);
}
@Caching
为自定义的组合缓存规则
Group annotation for multiple cache annotations (of different or the same type).
主要属性有:
- @Cacheable的组合:cacheable,默认{}
- @CachePut的组合:put,默认{}
- @CacheEvict的组合:evict,默认{}
示例如下
@Caching(evict = {
@CacheEvict(key = "'findByDocInfo_'+ #docVO.bussNo + '_'+ #docVO.category"),
@CacheEvict(key = "'selectByDocDetailId_'+ #docVO.id"),
@CacheEvict(key = "'findByDocDetailId_'+ #docVO.id ")
})
public void updateFileSort(DocVO docVO, DocDetailVO detailVO) {
impDocFileRepository.updateFileSort(detailVO.getId(),detailVO.getSort());
}
更多推荐
已为社区贡献7条内容
所有评论(0)