SpringBoot学习Day08——缓存

SpringBoot缓存

1. 什么是缓存

缓存一般用于存放不敏感且常用的数据,或者是一些临时性的数据。
缓存的规范是JSR-107,Java Caching 定义了五个接口:

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

但是由于JSR-107的配置比较麻烦;主要是使用的是Spring缓存抽象,其底层也是JSR-107。
Spring缓存抽象
Spring3.1开始定义了CacheCacheManager来简化缓存开发;Cache接口为缓存定义了组件规范,Cache接口下的的Spring提供了各种缓存的实现。

2.概念和注解

2.1 概念

  1. Cache:缓存接口,定义缓存操作;实现由:RedisCache、EhCacheCache、ConcurrentMapCache等
  2. CacheManager:缓存管理器,管理各种Cache组件

2.2 注解

2.2.1@Cacheable

针对方法配置,能够根据方法的请求参数对其结果进行缓存;如果有了相同的缓存,当前方法不会被调用。
属性:

  1. cacheNames/Value:指定缓存组件的名称;将方法的返回结果放在哪个缓存中,是数组的方式,可以指定多个缓存。
  2. key:缓存数据使用的key,默认是方法的参数,支持SpEL表达式;
  3. keyGenerator:key的生成器,自己指定key的生成器的组件id,keyGeneratorkey二选一使用
  4. cacheManager缓存管理器:得到缓存集合,与cacheReslover作用相同二选一使用;
  5. condition:指定符合条件的情况下缓存。
  6. unless:当unless指定的条件为fales才缓存;也可以获取到结果进行判断。
  7. sync:是否使用异步模式

缓存的工作原理和工作流程:
原理:在这里插入图片描述
流程:

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

也就是说在@Cacheable标注的方法执行之前来查询缓存中有没有对应的key如果没有就调用该方法,
如果有就跳过该方法。

2.2.2@CacheEvict

清空缓存
属性与@Cacheable大致相同
特别的属性:

  1. allEntries:是否删掉对应value缓存中的所有数据;属性值为false或者true;默认为false。
  2. beforeInvocation缓存的清除是否在方法之前执行,如果为false,方法在执行过程中出现错误,缓存就不会清除;属性值为false或者true;默认为false;。
2.2.3 @CachePut:

保证方法被调用,又希望被缓存;更新缓存,即使缓存中有值,也会调用该方法,将新的结果放在缓存中。它里面的属性和@Cacheable基本相同。使用result取出返回结果。当取缓存的key与查询缓存的key的是相同的时,@CachePut就达到了同时更新缓存的目的。

2.2.4 @Caching:

@CachePut;@CachePut、@CacheEvict的整合版;

2.2.5@CacheConfig

抽取缓存的公共配置

3.redis

Spring缓存抽象默认使用的是ConcurrentMapCacheManager作为缓存,将数据保存在ConcurrentMap中。

引入redis的starter

		 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

文章总结自B站:BV1Et411Y7tQ P72~P76

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值