1.@Cacheable
作用:针对方法配置,能够根据方法的请求参数对结果缓存
主要参数:
(1)value:缓存名称 @Cacheable(value="cache") or @Cacheable(value={"cache1","cache2"})
(2)key :缓存的 key,可以为空,如果指定要按照 SpEl表达式编写,如果不指定,则缺省按照方法的所有参数进行组合,例如:@Cacheable(value=”testcache”,key=”#userName”)。
(3)condition :缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存,例如:@Cacheable(value=”testcache”,condition=”#userName.length()>2
(4)unless:条件符合则不缓存
2.@CachePut
作用:针对方法配置,能够根据请求的参数进行缓存,@Cacheable 不同的是,它每次都会触发真实方法的调用,即每次都先更新
3.@CacheEvict
主要参数说明:
(1)value , key 和 condition 参数配置和@Cacheable一样
(2)allEntries :是否清空所有缓存内容,缺省为 false,如果指定为 true,则方法调用后将立即清空所有缓存,例如:@CachEvict(value=”testcache”,allEntries=true)
(3)beforeInvocation :是否在方法执行前就清空,缺省为 false,如果指定为 true,则在方法还没有执行的时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存,例如@CachEvict(value=”testcache”,beforeInvocation=true)。
4.@Cacheing
该注解可以实现同一个方法上同时使用多种注解
public @interface Caching {
Cacheable[] cacheable() default {};
CachePut[] put() default {};
CacheEvict[] evict() default {};
}
4.缓存策略
Eviction policy
移除策略,即如果缓存满了,从缓存中移除数据的策略;常见的有LFU、LRU、FIFO:
FIFO(First In First Out):先进先出算法,即先放入缓存的先被移除;
LRU(Least Recently Used):最久未使用算法,使用时间距离现在最久的那个被移除;
LFU(Least Frequently Used):最近最少使用算法,一定时间段内使用次数(频率)最少的那个被移除;
TTL(Time To Live )存活期,即从缓存中创建时间点开始直到它到期的一个时间段(不管在这个时间段内有没有访问都将过期)
TTI(Time To Idle)空闲期,即一个数据多久没被访问将从缓存中移除的时间