SpringBoot缓存注解@Cacheable、@CacheEvict、@CachePut详解

时间:2024-03-19 12:19:58

SpringBoot缓存注解详解

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

准备工作

  • 声明那些方法需要缓存
  • 配置cache缓存(注解\xml两种方式)

@cacheable详解

  • 可以标记一个方法或者一个类,标记方法时,cache会缓存方法返回的结果,标记类时,该类的所有方法都支持缓存。
  • 缓存数据时以键值对进行缓存,值就是返回结果,键提供两种策略(默认策略和自定义策略)。
  • 当一个支持缓存的方法在对象内部被调用时是不支持缓存的。

@cache属性(value、key、condition)

value属性指定Cache名称

使用value属性指定方法使用的缓存空间,value可以是单一cache,也可以是多个cache
@cache(value=“example”) //单一cache
@cache(value={’‘example1’’,’‘example2’’}) //多个cache

key自定义key

用于指定缓存保存键值生成策略,支持EL表达式

  • 直接使用参数名 eq:key=#id 或者 key=#idindex
  • 直接使用对象属性 eq:key=#user.id 或者 key=user.idindex
  • 同时还可以使用自带的root
    SpringBoot缓存注解@Cacheable、@CacheEvict、@CachePut详解

condition属性指定发生的条件

默认为空,表示无论什么情况都会缓存数据
其次通过EL表达式指定缓存对象,为true时缓存数据,为false时不进行缓存处理
eq:当user.id为偶数的时候缓存数据
@Cacheable(value={“users”}, key="#user.id", condition="#user.id%2==0")

@cacheput详解

@cacheable每次执行都会预先检测系统是否存在该键值的缓存,存在直接返回缓存数据,不存在执行方法并缓存数据,而@cacheput不会检测,每次都会执行方法并缓存数据不建议使用呦

#cacheevict详解

  • @CacheEvict是用来标注在需要清除缓存元素的方法或类上的
  • @CacheEvict可以指定的属性有value、key、condition、allEntries和beforeInvocation
    其中
    value、key、condition与@Cacheable类似

allEntries属性

boolean类型,表示是否需要清除缓存中的所有元素,默认为false,表示不需要,当为true时,将忽略指定的key

beforeInvocation属性

清除操作默认是在对应方法成功执行之后触发的,即方法执行过程中发生异常,不会触发清除操作

caching详解

@Caching注解可以让我们在一个方法或者类上同时指定多个Cache相关的注解
拥有三个属性:cacheable、put和evict,分别用于指定@Cacheable、@CachePut和@CacheEvict
eq:@Caching(cacheable = @Cacheable(“users”), evict = { @CacheEvict(“cache2”),@CacheEvict(value = “cache3”, allEntries = true) })

OK,看到这里相信大家对缓存已经非常得心应手了,快去搭建自己的项目缓存机制吧