SpringBoot整合缓存 ~ SpringBoot缓存工作原理以及@Cacheable运行流程

推荐文章阅读

Click me to read SpringBoot与缓存 ~ 概念、注解、整合Redis、分布式锁

Click me to read SpringBoot整合缓存 ~ SpringBoot缓存工作原理以及@Cacheable运行流程

Click me to read SpringBoot整合缓存 ~ 整合Redis缓存和序列化

Click me to download

前言

授 人 以 鱼 不 如 授 人 以 渔 , 建 议 大 家 收 藏 该 文 章 , 学 会 分 析 的 方 法 \color{red}授人以鱼不如授人以渔,建议大家收藏该文章,学会分析的方法
刚 看 缓 存 原 理 的 时 候 , 花 了 很 长 时 间 , 还 是 跟 踪 不 到 代 码 , 多 看 了 几 次 资 料 , 便 能 自 主 跟 踪 了 \color{red}刚看缓存原理的时候,花了很长时间,还是跟踪不到代码,多看了几次资料,便能自主跟踪了 便

缓存工作原理

  1. 老套路,看CacheAutoConfiguration.java文件
    在这里插入图片描述
  2. 缓存配置类,查看导入了哪些类
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
  3. 在这么多配置类中,默认生效哪个呢?
    方法1. 分析每个类,点击:
    在这里插入图片描述
    以我们熟悉的RedisCacheConfiguration为例:
    在这里插入图片描述
    所以默认情况下,不是redis缓存配置类生效。其他的就这样分析呗
    方法2: 直接看启动分析报告:

debug=true

在这里插入图片描述
结果是: SimpleCacheConfiguration
4. 定位SimpleCacheConfiguration做了什么
给 容 器 中 注 册 了 一 个 c a c h e M a n a g e r : C o n c u r r e n t M a p C a c h e M a n a g e r \color{red}给容器中注册了一个cacheManager:ConcurrentMapCacheManager cacheManagerConcurrentMapCacheManager
在这里插入图片描述
5、 cacheManager可以获取和创建ConcurrentMapCacheManager类型的缓存组件,他的作用将数据保存在ConcurrentHashMap里面
在这里插入图片描述
这 里 是 S p r i n g B o o t 的 缓 存 原 理 , 这 也 就 能 解 释 两 个 问 题 \color{#f6941d}这里是SpringBoot的缓存原理,这也就能解释两个问题 SpringBoot
第 一 次 使 用 @ C a c h e a b l e 注 解 时 , 根 本 不 需 要 缓 存 组 件 配 置 , 默 认 用 一 个 m a p \color{#f6941d}第一次使用@Cacheable注解时,根本不需要缓存组件配置,默认用一个map 使@Cacheablemap
每 次 启 动 后 数 据 都 会 消 失 , 没 有 持 久 化 \color{#f6941d}每次启动后数据都会消失,没有持久化

Cacheable运行流程

@Cacheable(cacheNames = {
    
    "emp"})
	public Employee get(Integer id){
    
    
		return employeeMapper.selectById(id);
	}

1、 方法运行之前,先去查询Cache组件(缓存组件),按照cacheName指定的名字获取,若第一次没有Cache组件会自动创建。
在 C o n c u r r e n t M a p C a c h e M a n a g e r 打 上 断 点 看 到 \color{red}在ConcurrentMapCacheManager打上断点看到 ConcurrentMapCacheManager
在这里插入图片描述
在这里插入图片描述
2、 去Cache中查找缓存的内容,使用一个key,默认就是方法的参数;
key是按照某种策略生成的,默认是使用keyGenerator生成的,默认使用SimpleKeyGenerator生成key

org.springframework.cache.concurrent.ConcurrentMapCache#lookup

在这里插入图片描述

3、 没有查询到缓存就会调用目标方法
!](https://img-blog.csdnimg.cn/20201124163804649.png#pic_center)

4、 将目标方法返回的结果,放入缓存中
在这里插入图片描述

若lookUp找得到的话,则不进入方法

扫描二维码关注公众号,回复: 12717494 查看本文章

在这里插入图片描述

总结

【 操 作 操 作 再 操 作 , 记 录 记 录 再 记 录 】 \color{red}【操作操作再操作,记录记录再记录】
从 第 一 次 跟 踪 源 码 到 熟 悉 源 码 , 花 了 两 天 的 时 间 , 建 议 大 家 一 定 要 去 跟 踪 四 次 , 不 要 只 看 不 动 手 哦 \color{red}从第一次跟踪源码到熟悉源码,花了两天的时间,建议大家一定要去跟踪四次,不要只看不动手哦
你 知 道 的 越 多 , 你 知 道 的 越 少 ! 希 望 对 你 有 帮 助 ! \color{red}你知道的越多,你知道的越少!希望对你有帮助!

猜你喜欢

转载自blog.csdn.net/xiaozhegaa/article/details/110084902