spring缓存org.springframework.cache.Cache和org.springframework.cache.CacheManager接口是spring中用来统一不同的缓存技术公用接口Cache接口为缓存的组件规范定义,包含缓存的各种操作集合Cache接口下spring提供了各种xxxCache的实现,如 RedisCache、ConcurrentMapCache等每次调用有缓存功能的方法时,spring 会检查指定参数的目标方法是否已经被调用过,如果有就直接从缓存中获取方法的结果;如果没有就调用过方法就先缓存结果后在将结果返回给用户,下次调用直接从缓存中获取。使用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”)