推荐文章阅读
Click me to read SpringBoot与缓存 ~ 概念、注解、整合Redis、分布式锁
Click me to read SpringBoot整合缓存 ~ SpringBoot缓存工作原理以及@Cacheable运行流程
Click me to read SpringBoot整合缓存 ~ 整合Redis缓存和序列化
前言
缓存工作原理
- 老套路,看CacheAutoConfiguration.java文件
- 缓存配置类,查看导入了哪些类
- 在这么多配置类中,默认生效哪个呢?
方法1. 分析每个类,点击:
以我们熟悉的RedisCacheConfiguration为例:
所以默认情况下,不是redis缓存配置类生效。其他的就这样分析呗 方法2: 直接看启动分析报告:
debug=true
结果是: SimpleCacheConfiguration
4. 定位SimpleCacheConfiguration做了什么
5、 cacheManager可以获取和创建ConcurrentMapCacheManager类型的缓存组件,他的作用将数据保存在ConcurrentHashMap里面
Cacheable运行流程
@Cacheable(cacheNames = {"emp"})
public Employee get(Integer id){
return employeeMapper.selectById(id);
}
1、 方法运行之前,先去查询Cache组件(缓存组件),按照cacheName指定的名字获取,若第一次没有Cache组件会自动创建。
在这里插入图片描述
2、 去Cache中查找缓存的内容,使用一个key,默认就是方法的参数;
key是按照某种策略生成的,默认是使用keyGenerator生成的,默认使用SimpleKeyGenerator生成key
org.springframework.cache.concurrent.ConcurrentMapCache#lookup
3、 没有查询到缓存就会调用目标方法 !](img-blog.csdnimg.cn/20201124163…)
4、 将目标方法返回的结果,放入缓存中
若lookUp找得到的话,则不进入方法
总结