简介:Spring提供注解来支持Spring cache。Spring cache是作用在方法上的,当调用一个缓存方法时,会把该方法的参数和结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时,就不再执行该方法,而是从缓存直接返回。
缓存注解有以下三个:
@Cacheable @CacheEvict @CachePut
@Cacheable
// 示例
@Cacheable(cacheNames = "getCategoryInfoCoupon", key = "#tenantId + ':' + #categoryId + ':' + #page.current")
public IPage<CouponProdsDto> getCategoryInfoCoupon(Page<CouponProdsDto> page, Long categoryId, String tenantId, String userId) {}
@Cacheable
可以标记在一个类上,也可以标记在一个方法上。标记在一个类上,则表明该类的所有方法都是支持缓存的。Spring在缓存方法的返回值都是以键值对进行缓存的,值就是方法的返回结果,至于key的话,Spring支持两种策略,默认策略和自定义策略。
注意:当一个支持缓存的方法在对象内部被调用是不会触发缓存功能的。
@Cacheable
可以指定三个属性,value
、key
和condition
@CacheEvict
@CacheEvict清除指定下所有缓存
// 示例
@CacheEvict(cacheNames = "parts:grid",allEntries = true)
此注解会清除
part:grid
下所有缓存,用法和@Cacheable
等一样,清除指定key的缓存
@CacheEvict
要求指定一个或多个缓存,使之都受影响。此外,还提供了一个额外的参数allEntries
。表示是否需要清除缓存中的所有元素。默认为false,表示不需要。
当指定了allEntries
为true时,Spring Cache
将忽略指定的key
。有的时候我们需要Cache一下清除所有的元素。
allEntries
属性: 是否清空所有缓存内容
beforeInvocation
属性: 是否在方法执行前就清空
@CachePut
// 示例
@CachePut(value="accountCache",key="#account.getName()")// 更新accountCache 缓存
public Account updateAccount(Account account) {
return updateDB(account);
}
@CachePut
标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。
以key作为键,返回值作为值,进行缓存。