转载

【spring boot2】第10篇:spring boot 整合 cache

spring缓存

org.springframework.cache.Cacheorg.springframework.cache.CacheManager 接口是spring中用来统一不同的缓存技术公用接口

  1. Cache接口为缓存的组件规范定义,包含缓存的各种操作集合
  2. Cache接口下spring提供了各种xxxCache的实现,如 RedisCache、ConcurrentMapCache等
  3. 每次调用有缓存功能的方法时,spring 会检查指定参数的目标方法是否已经被调用过,如果有就直接从缓存中获取方法的结果;如果没有就调用过方法就先缓存结果后在将结果返回给用户,下次调用直接从缓存中获取。
  4. 使用spring缓存抽象时我们需要关注以下两点:

    • 确定方法需要被缓存以及他们的缓存策略
    • 从缓存中读取之前缓存存储的数据

spring 缓存中几个概念

名词 说明
Cache 缓存接口,定义缓存操作。实现有:RedisCache、EhCacheCache、 ConcurrentMapCache等
CacheManager 缓存管理器,管理各种缓存(Cache)组件
@Cacheable 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存
@CacheEvict 清空缓存的注解
@CachePut 保证方法被调用,又希望结果被缓存
@EnableCaching 开启基于注解的缓存
keyGenerator 缓存数据时key生成策略
serialize 缓存数据时value序列化策略

@Cacheable、@CacheEvict和@CachePut 注解属性

属性 说明 示例
value 缓存的名称,在 spring 配置文件中定义,必须指定 至少一个 @Cacheable(value=”mycache”) 或者 @Cacheable(value={”cache1”,”cache2”}
key 缓存的 key,可以为空,如果指定要必须按照 spel 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合 @Cacheable(value=”testcache”,key=”#userName”)
condition 缓存的条件,可以为空,使用 spel 编写,返回 true 或者 false,只有为 true 才进行缓存/清除缓存,在调用方法之前之后都能判断 @Cacheable(value=”testcache”,condition=”#userNam e.length()>2”)
allEntries (@CacheEvict ) 是否清空所有缓存内容,缺省为 false,如果指定为 true,则方法调用后将立即清空所有缓存 @CachEvict(value=”testcache”,allEntries=true)
beforeInvocation(@CacheEvict) 是否在方法执行前就清空,缺省为 false,如果指定 为 true,则在方法还没有执行的时候就清空缓存, 缺省情况下,如果方法执行抛出异常,则不会清空 缓存 @CachEvict(value=”testcache”, beforeInvocation=true)
unless(@CachePut) (@Cacheable) 用于否决缓存的,不像condition,该表达式只在方 法执行之后判断,此时可以拿到返回值result进行判 断。条件为true不会缓存,fasle才缓存 @Cacheable(value=”testcache”,unless=”#result == null”)
原文  https://segmentfault.com/a/1190000018711964
正文到此结束
Loading...