Springboot整合缓存

JSR107

Java Cashing定义了5个核心接口,分别是

  • CashingProvider定义了创建、配置、获取、管理和控制多个CashManager。一个应用可以在运行期间访问多个CashingProvider
  • CashManager定义了创建、配置、获取、管理和控制多个唯一命名的Cashe,这些Cache存在于CasheManager的上下文中,一个CacheManager仅仅被一个CashingProvider所拥有
  • Cache是一个类似Map的数据结构并临时存储以key为索引的值。一个Cache仅仅被一个Cachemanager拥有
  • Entry是一个存储在Cache中的key-value对
  • Expiry每一个存储在Cache中的条目有一个定义的有效期,条目将变为过期状态,只要过期,条目将不可访问、更新和删除。可以通过ExpiryPolicy设置缓存有效期

他们之间的关系如下图所示

Spring保留了CacheManager和Cache来简化开发。CacheManager来管理Cache,Cache来执行增删改查等具体功能

几个重要的概念和缓存注解

@Cacheable具体内容讲解

  • 将方法的运行结果进行缓存;以后要再相同的数据,直接从缓存中获取数据,不再调用方法
  • CacheManager管理多个Cache组件,对于缓存的操作都是在Cache组件中,每一个缓存主键都有自己唯一一个名字;
  • CacheNames/Value:指定缓存主键的名字
  • key:缓存数据使用的key,用它指定,默认是使用方法的参数值,value是方法的返回值
  • keyGenerator:key的生成器,我们可以自己指定key生成器的组件id;但是只可以二选一使用
  • cacheManager:指定缓存的管理器,或者cacheResolver指定获取解析器
  • condition:指定符合条件的情况下,才缓存
  • unless:否定缓存,当unless指定的条件为true,方法的返回值就不会被缓存,可以获取到结果进行判断unless = “#result == null”
  • sync:是否使用异步模式

 

机制

1,自动配置类CacheCacheAutoConfigConfiguration

2,缓存的配置类

3,哪个配置类生效呢?根据配置规则,如果匹配成功,显示matched;否则显示did not match

4,如果匹配,给容器注册了一个CacheManager

5,可以获取和创建ConcurrentMapCache类型的缓存主键,它将数据保存在ConcurrentMap中

使用缓存的运行流程

  1. 方法运行之前,先去查询缓存cache(缓存组件),按照cacheNames指定的名字获取,CacheManager先获取相应的缓存,如果是第一次操作,缓存组件不存在,cache会自动创建
  2. 去cache中查找缓存的内容,使用是key,默认key是方法传入的参数,key是按照某种策略生成的,默认是使用keyGenerator生成的,默认使用SimpleKeyGenerator生成的key;SimpleKeyGenerator生成的key的默认策略;1,如果没有参数,key=new SimpleKey();2,单个参数,key=参数值;3,多个参数,key=new SimpleKey(params);
  3. 没有查到缓存就调用目标方法
  4. 将目标方法返回的结果,放进缓存

@Cacheable标注的方法执行之前先来检查缓存中有没有这个数据,默认按照参数的key去查询缓存,如果没有就将运行方法放入缓存,以后再次调用,就可以直接使用缓存中的数据

@CachePut

  • 既调用方法,又更新缓存(同步同步缓存,前提是取和放的key是同一个key)
  • 修改了数据库的每个数据,同时更新缓存

1,先调用方发

2,将目标的缓存更新到数据库

@Cacheable不能使用#result取回返回结果

@CacheEvict

  1. 当删除数据的时候,清除其对应的缓存
  2. key:指定要清除的数据
  3. allEntries = true;将这个混存所有的数据都删除
  4. @beforeInvocation默认等于false,意思是是否在方法执行之前执行清除缓存数据
  5. @beforeInvocation改为true,代表缓存的清除是在方法运行之前,无论方法的正确与否,都会清除缓存

@Caching可以配置多个复杂规则

  • cachable
  • put
  • evict
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值