SpringBoot与缓存

1、缓存规范 JSR107及核心接口类

java caching定义了5个核心接口,分别是CachingProvider,CacheManager,Cach,Entry,Expiry

  • CachingProvider:定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期访问多个CachingProvider

  • CacheManager:定义了创建,配置,获取,管理和控制多个唯一命名的Cache,这些Cache存在于CacheManager的上下文中。一个CacheManager仅被一个CacheProvider所拥有。

  • Cache:是一个类似Map的数据结构并临时存储以key为索引的值。一个Cache仅被一个CacheManager所拥有。

  • Entry:是一个存储在Cache中的key-value对。

  • Expiry:每一个存储在Cache中的条目有一个定义的有效期。一旦超过这个时间,条目为过期的状态。一旦过期,条目将不可访问、更新、删除。缓存有效期可以通过ExpiryPolicy设置。

    以上几个核心接口的关系图解:

SpringBoot与缓存_第1张图片

SpringBoot与缓存_第2张图片

2、缓存概念及注解

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

3、@Cacaheable/@CachePut/@CacheEvict主要的参数

value 缓存的名称,在spirng配置文件中定义,必须制定至少一个 例如:
@Cacheable(value="emp")或者@Cacheable(value={"dept","emp"})
key 缓存的key,可以为空,如果指定要按照spel表达式编写,如果不指定,则缺省按照方法的所有参数进行组合。 例如:
@Cacheable(value="emp",key="#userName")
condition 缓存的条件 例如:
@Cacheable(value="emp",conditon="#userName.length()>2")
allEntries(@CacheEvict) 是否清空所有缓存内容,默认是false. 例如:
@Cacheable(value="emp",allEntries=true)
beforeInvocation(@CacheEvict) 是否在方法执行前就清空,默认是false,如果指定为true,则在方法还没有执行的时候就清空缓存。 例如:
@Cacheable(value="emp",beforeInvocation=true)
unless(@Cacaheable,@CachePut) 用于否决缓存的,不像condition,该表达式只在方法执行之后判断,此时可以拿到的返回值result进行判断。条件为true不会缓存,false才缓存。 例如:
@Cacheable(value="emp",unless="#result==null")

 

你可能感兴趣的:(springboot)