@Cacheable
作用
作用在方法上,也可以标记在一个类上
- 当标记在一个方法上时表示该方法是支持缓存的
- 当标记在一个类上时则表示该类所有的方法都是支持缓存
参数
value
缓存的名称
- value参数是必须指定的,表示当前方法的返回值是会被缓存在哪个Cache上的,对应Cache的名称。其可以是一个Cache也可以是多个Cache
- 每一个缓存名称代表一个缓存对象
- 当一个方法填写多个缓存名称时将创建多个缓存对象
- 当多个方法使用同一缓存名称时相同参数的缓存会被覆盖
key
缓存的key
- key标记了缓存对象中的每一个缓存数据
- 当我们没有指定该属性时,Spring将使用默认策略生成key
- 系统会自动按照方法的所有入参生成key,也就是说相同的入参值将会返回同样的缓存结果
condition
缓存的条件
- condition属性默认为空,表示将缓存所有的调用情形
- 不为空时,满足条件后,方法的结果才会被缓存
- 使用 SpEL表达式编写条件,返回 true 或者 false,只有为 true 才进行缓存
//只有name长度大于6时才会进行缓存。 @Cacheable(value="cache",condition="#ame.length()>6")
示例
/**
* #id 表示使用参数id作为key
*/
@Cacheable(value="nameCache", key="#id")
public String getName(Integer id) {
return null;
}
/**
* #p0 表示第一个参数
*/
@Cacheable(value="nameCache", key="#p0")
public String getName(Integer id) {
return null;
}
/**
* #user.id 表示User中的id值
*/
@Cacheable(value="nameCache", key="#user.id")
public String getName(User user) {
return null;
}
/**
* #p0.id 表示第一个参数里的id属性值
*/
@Cacheable(value="nameCache", key="#p0.id")
public String getName(User user) {
return null;
}
/**
* key 可以指定多字段拼接
* 通过用户的id和code拼接当做key
*/
@Cacheable(value="nameCache", key="#p0.id + '_' #p0.code")
public String getName(User user) {
return null;
}
@CachePut
作用
- 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存
- 和 @Cacheable 不同的是,@CachePut每次都会触发真实方法的调用
- 此注解常被用于更新缓存使用
参数
同@Cacheable的参数一样
@CacheEvict
作用
- 作用在方法上,根据一定的条件对缓存结果进行清空
参数
value
缓存的名称
删除指定名称的缓存对象
key
缓存的 key
删除指定key的缓存对象
condition
缓存的条件
删除指定条件的缓存对象
allEntries
清空所有缓存
- 类型为布尔值
- 默认为 false,如果指定为 true,则方法调用后将立即清空缓存对象下的所有缓存
beforeInvocation
- 类型为布尔值
- 默认为 false,如果指定为 true,则在方法还没有执行的时候就清空缓存
- 默认情况下,方法运行抛出异常时,不会清空缓存
@Caching
- 此注解可以使我们在一个方法或者类上同时指定多个Spring Cache相关的注解
- 三个属性
cacheable
对应@Cacheableput
对应@CachePutevict
对应@CacheEvict
示例
@Caching(cacheable = @Cacheable("nameCache"), evict = { @CacheEvict("nameCache"),@CacheEvict(value = "nameCache", allEntries = true) })
public String getName(Integer id) {
return null;
}
© 版权声明
非商业转载或引用请标注本文链接,商业转载或引用请联系站长
部分文章内容可能来自互联网,如有侵权,请通过邮件联系
部分文章内容可能来自互联网,如有侵权,请通过邮件联系
THE END
暂无评论内容