缓存工作原理 &@Cacheable 运行流程|学习笔记

简介: 快速学习缓存工作原理 &@Cacheable 运行流程

开发者学堂课程【SpringBoot 快速掌握 - 高级应用:缓存工作原理&@Cacheable 运行流程】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/613/detail/9290


缓存工作原理 &@Cacheable 运行流程

原理:

1、自动配置类; CacheAutoConfiguration

2、缓存的配置类

org,springframework , boot,  autoconfigure , cache, Generic Cache  Configuration

org,springframework,boot,autoconfigure , cache]JCache[ acheConfiguration

org,springframework,boot, autoconfigure , cache. EhCacheCacheConfiguration

org,springframework,boot, autoconfigure ,cache. HazelcastCacheConfiguratio

org,springframework,boot.autoconfigure , cache. InfinispanCacheConfiguration

org,springframework,boot,autoconfigure , cache. CouchbaseCacheConfiguration

org,springframework.boot,autoconfigure , caqhe, RedisCacheConfiguration

org,springframework . boot.  autoconfigure ,cahe. CaffeineCacheConfiguration

org,springframework,boot.autoconfigure , cache. GuavaCacheConfiguration

org,springframework.boot.autoconfigure,cache.S imple  CacheConfiguration

org,springframework,boot,autoconfigure , cache, No0pCacheConfiguration |

这些缓存配置类都是有顺序的

哪个配置类默认生效: SimpleCacheConfiguration ;

直接在缓存控制台测试就可以得到

给容器中注册了一个 CacheManager :  

ConcurpentMapCacheManager

可以获取和创建 ConcurrentMapCache 类型的援存组件;他的作用将数据保存在 ConcurrentMap 中;

运行流程:(断点都打在行内)

以 @Cacheable:为例

方法运行之前,先去查询 Cache (缓存组件),按照 cacheNames 指定的名字获取;

( CacheManager 先获取相应的缓存),第一次获取缓存如果没有 Cache 组件会自动创建。

@Override

public  Collection <String>get  CacheNames (){return  Collections . unmodifiableset (this.cach=Wa。

@Override

public Cache getCache(String name){name;"emp"

Cache cache=this cacheMap. get(name);cache:null

if(cache==null&this. dynamic){

synchronized (this.cacheMap){

cache=this cacheMap. get(name);name:"emp"

if(cache==null){cache: null

cache= createConcurrentMapCache (name);

this:cacheMap. put(name, cache);

}

}

}

return cache;

去 Cache 中查找缓存的内容,使用一个 key,默认就是方法的参数;key 是按照某种策略生成的。默认是使用 KeyGenerator 生成的,默认使用 SimpleKeyGenerator 生成 key

SimpLeKeyGenerator 生成 key 的默认策略;

如果没有参数;key=new SimpleKey();

如果有一个参数:key-参数的值

如果有多个参数:key=new SimpleKey(params )

没有查到缓存就调用目标方法;

将目标方法返回的结果,放进缓存中。调用的是put

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

第一次运行放入缓存,要从缓存中查询

核心:

使用【 CacheMandgerKConcurrentMapCacheMandger 】按照名字得到 【ConcurrentMapCache】组件

key 使用 keyGenerator 生成的,默认是 SimpleKeyGenerator

@Override

protected0bjectlookup (0bjectkey){key:2

return this. store. get(key); key:2

}

@ SuppressWarnings ("unchecked")

@Override

public<T>T get(0bjectkey, Callable<T> valueloader ){

//Try efficient lookup on the  ConcurrentHashMap  first...

ValueWrapperstoreValue =get(key);

if( storeValue !=null){

return(T) storeValue . get();

}

@param  id

@return

@Cacheable( cacheNames ={"emp"})

public Employee getEmp(Integer id){

System. out. println("查询"+id+"号员工");

Employee emp= emp1oyeeMapper . getEmpById (id);

return emp;

}

}

相关文章
|
6月前
|
XML 存储 缓存
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache管理器的实战开发指南(修正篇)
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache管理器的实战开发指南(修正篇)
109 0
|
10天前
|
存储 缓存 Java
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
46 2
|
2月前
|
缓存 JavaScript
vue使用keep-alive实现页面前进刷新,后退缓存,完美运行无bug
vue使用keep-alive实现页面前进刷新,后退缓存,完美运行无bug
461 1
|
3月前
|
存储 缓存 算法
缓存优化利器:5分钟实现 LRU Cache,从原理到代码!
嗨,大家好!我是你们的技术小伙伴——小米。今天带大家深入了解并手写一个实用的LRU Cache(最近最少使用缓存)。LRU Cache是一种高效的数据淘汰策略,在内存有限的情况下特别有用。本文将从原理讲起,带你一步步用Java实现一个简单的LRU Cache,并探讨其在真实场景中的应用与优化方案,如线程安全、缓存持久化等。无论你是初学者还是有一定经验的开发者,都能从中受益。让我们一起动手,探索LRU Cache的魅力吧!别忘了点赞、转发和收藏哦~
68 2
|
3月前
|
缓存 监控 网络协议
DNS缓存中毒原理
【8月更文挑战第17天】
92 1
|
3月前
|
存储 缓存 NoSQL
微服务缓存原理与最佳实践
微服务缓存原理与最佳实践
|
3月前
|
缓存 前端开发 Java
【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(-Xms512m -Xmx1204m)?
【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(-Xms512m -Xmx1204m)?
|
5月前
|
域名解析 存储 缓存
HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口
【6月更文挑战第23天】 HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口;TCP连接(HTTP/1.1可能需排队);三次握手;发送请求头与体;服务器处理并返回响应;TCP连接可能关闭或保持;浏览器接收并显示响应,更新缓存。HTTP版本间有差异。
82 5
|
4月前
|
存储 算法 缓存
高并发架构设计三大利器:缓存、限流和降级问题之滑动窗口算法的原理是什么
高并发架构设计三大利器:缓存、限流和降级问题之滑动窗口算法的原理是什么