缓存注解(@Cacheable、@CacheEvict、@CachePut、@Caching)

缓存类型注解(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该操作会被覆盖
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值