缓存类型注解(SpringCache框架)
@Cacheable注解(用于查找模块)
- 标记在一个方法上,也可以标记在类上
- 缓存标注对象的返回结果,标注在方法上缓存该方法的返回值,标注在类上缓存该类所有方法的返回值
- value缓存名称,可以缓存多个。
- key缓存的key规则,可以用SpringEL表达式,默认是方法参数组合
- condition缓存条件,使用SpringEL表达式,返回true才缓存
SpringEL表达式
属性名称 | 描述 | 示例 |
---|---|---|
methodName | 当前方法名 | #root.methodName |
method | 当前方法 | #root.method.name |
target | 当前被调用的对象 | #root.target |
targetClass | 当前被调用的对象的class | #root.targetClass |
args | 当前方法参数组成的数组 | #root.args[0] |
caches | 当前被调用的方法使用的Cache | #root.caches[0].name |
例子:
//存一条,当id不是上次的id,会替换缓存。
@Cacheable(value={"product"},key="#root.methodName")
public ProductDTO findById(int id){
return productMapper.selectById(id);
}
//会存多条,方法名+id为key。
@Cacheable(value={"product"},key="#root.args[0]")
public ProductDTO findById(int id){
return productMapper.selectById(id);
}
//分页
@Cacheable(value={"product_page"},key="#root.methodName+'_'+#page+'_'+#size")
@CacheEvict注解(用于删除模块)
-
从缓存中移除相应数据,触发缓存删除的操作
-
value缓存名称,可以有多个
-
key缓存的key规则,可以用springEL表达式,默认是方法参数组合
-
beforelnvocation=flase
- 缓存的清除是否在方法执行前执行,默认代表缓存清除操作是在方法执行之后执行
- 如果出现移除缓存就不会被清除
-
beforelnvocation=true
- 代表清除缓存操作是在方法运行之前执行,无论方法是否出现异常,缓存都清除
例子:
@CacheEvict(value={"product"},key="#root.args[0]")
public int delById(int id){
return productMapper.deleteById(id);
}
@CachePut注解(用于更新模块)
- 根据方法的请求参数对其结果进行缓存,每次都会触发真实方法的调用
- value缓存名称,可以有多个
- key缓存的key规则,可以用springEl表达式,默认是方法参数组合
- condition缓存条件,使用SpringEL编写,返回true才缓存
例子
//key为商品的id,添加是要暴增key的名称和查询时key的名称保持一致;cacheManager是设置过期时间
@CachePut(value={"product"},key="#productDO.id",cacheManager="cacheManager1Minute")
@Caching注解
- 组合多个Cache注解使用
- 允许在同一方法上使用多个嵌套的@Cacheable、@CachePut、@CacheEvict注解
@Caching(
cacheable = {
@Cacheable(value = {"product"},key = "#root.agrs[0]"),
@Cacheable(value = {"product"},key = "'xdclass_'+#root.agrs[0]")
},
put = {
@CachePut(value = {"product_test"},key = "#productDO")
}
)
@CacheConfig注解
- 是一个类级别的注解,允许共享缓存的名称、KeyGenerator CacheManager和CacheResolver该操作会被覆盖