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设置。

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

2、缓存概念及注解

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

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值