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


一、Spring Cache的核心思想

在调用一个缓存方法时,会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。


二、@Cacheable

  1. 可以标记在一个方法上,也可以标记在一个类上
  2. 以键值对进行缓存,键支持默认策略和自定义策略,值是方法的返回结果
  3. 一个支持缓存的方法在对象内部被调用时不会触发缓存功能
  4. 每次执行前会检查Cache中是否存在相同key的缓存元素,存在就直接从缓存中取,不存在才执行
  5. 可以指定value、key和condition三个属性
    1)value属性:指定Cache名称,必填。表示当前方法的返回值是会被缓存在哪个Cache。支持指定多个Cache(@Cacheable({“cache1”, “cache2”}))
    2)key属性:指定Spring缓存方法的返回结果时对应的key,非必填,默认是默认策略生成key。自定义策略是指通过Spring的EL表达式来指定key,可以直接使用“#参数名”或者“#p参数index”,如key="#id"、 key="#p0"、key="#user.id"、key="#p0.id"。且Spring还提供了一个root对象来生成key,使用时可以省略"#root"。
    在这里插入图片描述
    3) condition属性:指定发生的条件,默认为空,表示缓存所有调用情形;也可以通过SpringEL表达式指定,为true时缓存,为false时跳过,即每次调用方法时均会判断。如condition="#user.id%2==0",表示只有当user的id为偶数时才会进行缓存

三、@CachePut

  1. 可以标记在一个方法上,也可以标记在一个类上
  2. 指定属性同@Cacheable
  3. 不会像@Cacheable一样,执行方法前判断是否已缓存key,而是每次都执行,并将执行结果以键值对的形式存入指定的缓存中

四、@CacheEvict

  1. 用来标注在需要清除缓存元素的方法或类上的
  2. 可以指定value、key、condition、allEntries和beforeInvocation五个属性
  3. value、key、condition属性与@Cacheable类似
  4. allEntries属性:boolean类型,表示是否需要清除缓存中的所有元素。默认为false,表示不需要。若指定为true,会忽略key属性
  5. beforeInvocation属性:清除操作默认是在对应方法成功执行之后触发的,即方法未能成功返回时不会触发清除操作。使用beforeInvocation可以改变触发清除操作的时间,当我们指定该属性值为true时,Spring会在调用该方法之前清除缓存中的指定元素。

五、@Caching

  1. 使用该注解,可以在一个方法或者类上同时指定多个Spring Cache相关的注解
  2. 可以指定cacheable、put和evict三个属性,分别对应相应的注解,如@Caching(cacheable = @Cacheable(“users”), evict = { @CacheEvict(“cache2”),@CacheEvict(value = “cache3”, allEntries = true) })
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值