相关注解介绍

1 @Cacheable

如果缓存中不存在目标值,则将调用目标方法并将返回的值存入缓存;如果存在,则直接返回缓存中的值,不会执行方法体。即使方法体内进行了数据库的更新操作,也不会执行。

该注解常用参数如下:

  1. cacheNames/value :存储方法调用结果的缓存的名称

  2. key :缓存数据使用的key,可以用它来指定,key="#param"可以指定参数值,也可以是其他属性

  3. keyGenerator :key的生成器,用来自定义key的生成,与key为二选一,不能兼存

  4. condition:用于使方法缓存有条件,默认为"" ,表示方法结果始终被缓存。conditon="#id>1000"表示id>1000的数据才进行缓存

  5. unless:用于否决方法缓存,此表达式在方法被调用后计算,因此可以引用方法返回值(result),默认为"" ,这意味着缓存永远不会被否决。unless = "#result==null"表示除非该方法返回值为null,否则将方法返回值进行缓存

  6. sync :是否使用异步模式,默认为false不使用异步

2 @CachePut

如果缓存中先前存在目标值,则更新缓存中的值为该方法的返回值;如果不存在,则将方法的返回值存入缓存。

该注解常用参数同@Cacheable,不过@CachePut没有sync 这个参数

3 @CacheEvict

如果缓存中存在存在目标值,则将其从缓存中删除
该注解常用参数如下:

  1. cacheNames/value、key、keyGenerator、condition同@Cacheable
  2. allEntries:如果指定allEntries为true,Spring Cache将忽略指定的key清除缓存中的所有元素,默认情况下为false。
  3. beforeInvocation:删除缓存操作默认是在对应方法成功执行之后触发的,方法如果因为抛出异常而未能成功返回时也不会触发删除操作。如果指定beforeInvocation为true ,则无论方法结果如何,无论方法是否抛出异常都会导致删除缓存。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐