spring boot 缓存

spring boot 缓存

一 、JSR107

Java Caching定义了5个接口核心,分别为CahingProvider,CacheManager,Cache,Entry和Expiry

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

二、Spring 缓存抽象

Spring 从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;并支持使用JCache(JSR-107)注解简化我们开发;

  • Cache接口为缓存组件规范定义,包含缓存的各种操作集合。
  • Cache接口下Spring 提供了各种XXXCache的实现;如RedisCache、EhCacheCache,ConcurrentMapCache等。
  • 每次调用需要缓存功能的方法是,Spring会检查指定的参数的指定目标方法是否已经被调用过,如果有直接从缓存中获取方法调用后的结果,如果没有就调用方法并缓存结果后返回个用户,下次调用直接从缓存中获取。
  • 注意:
    • 确定方法需要被缓存以及他们的缓存策略
    • 从缓存中读取之间缓存存储的数据。
接口和缓存注解

在这里插入图片描述

  • @Cacheable 属性:cacheNames/value ,指定缓存组件的名字,将方法的返回结果放在哪个缓存中,是数组的方式,可以指定多个缓存。
    key: 缓存数据使用的key,可以用来它来指定,默认是传入的方法参数的值,同时也可以使用spEl语句,如:#id 表示参数id的值
    在这里插入图片描述

    ​ keyGenerator: key的生产器,可以指定key的生产器的组件id

    ​ cacheManager:指定缓存管理器或者指定缓存解析器cacheResolver;

    ​ condition:指定符合条件情况才缓存

    ​ unless: 当unless指定的条件为true ,方法的返回值就不会被缓存,可以获取到结果进行判断。

    ​ sync:是否使用异步模式

    流程:

    1. 方法运行之前,先去查询Cache(缓存组件)、按照cacheName指定的名字去查询(CacheManager先获取相应的缓存),第一次获取缓存如果没有cache组件会自动创建
    2. 去cache中查找缓存内容使用一个key,key 按照某种策略生产的,默认使用keyGenerator生产的。
    3. 如果没有查询到,就调用目标方法。
    4. 将目标方法返回的结果,放入缓存中。
    5. 再次调用,直接从缓存获取。
  • @CachePut ,即调用方法,又更新缓存数据。先调用方法,再将返回的结果放入缓存中。

  • @CacheEvict 清除缓存

    ​ key: 清除指定key的缓存

    ​ allEntries = true : 清楚这个缓存中的所有数据

    beforeInvocation = false: 缓存的清楚是否在方法之前执行,默认在方法执行之后执行。

  • @Caching : 组合了@Cacheable,@CachePut,@CacheEvict注解

  • CacheConfig :可以指定 缓存的公共属性

三、以redis为缓存管理器

Redis 是一个开源(BSD许可)的,内存中的数据结果存储系统,它可以作为数据库、缓存和消息中间件。

步骤:

  • 引入redis的starter,容器中自动导入RedisCacheManager;
  • RedisCacheManager帮我们创建RedisCache来作为缓存组件,RedisCache通过Redis来缓存数据
  • 以K-V形式保存数据,默认采用序列化形式保存。
  • 可以自定义CacheManager,可以json 的格式存入redis。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值