admin管理员组

文章数量:1641964

目录

  • 一、Spring Cache的核心思想
  • 二、@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) })

本文标签: 注解缓存Springcacheablecaching