java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > spring三级缓存

Java Spring三级缓存

作者:?abc!

三级缓存就是在Bean生成流程中保存Bean对象三种形态的三个Map集合,这个三级缓存就是为了解决循环依赖,本文给大家介绍Java Spring三级缓存,感兴趣的朋友一起看看吧

三级缓存是指什么

我们常说的三级缓存如下:

CPU

基本概念

CPU 的访问速度每 18 个月就会翻 倍,相当于每年增⻓ 60% 左右,内存的速度当然也会不断增⻓,但是增⻓的速度远小于 CPU,平均每年 只增⻓ 7% 左右。于是,CPU 与内存的访问性能的差距不断拉大。

为了弥补 CPU 与内存两者之间的性能差异,就在 CPU 内部引入了 CPU Cache,也称高速缓存

CPU Cache 通常分为大小不等的三级缓存,分别是 L1 Cache、L2 Cache 和 L3 Cache。其中L3是多个核心共享的

离 CPU 核心越近,缓存的读写速度就越快
但 CPU 的空间很狭小,离 CPU 越近缓存大小受到的限制也越大

所以,综合硬件布局、性能等因素,CPU 缓存通常分为大小不等的三级缓存。

程序执行数据流向

顺序如下

Spring三级缓存

概述

三级缓存就是在Bean生成流程中保存Bean对象三种形态的三个Map集合
]
这个三级缓存就是为了解决循环依赖

哪三个缓存

Spring三级缓存机制包括以下三个缓存:

// 一级缓存Map 存放完整的Bean(流程跑完的)
private final Map<String, Object> singletonObjects = new ConcurrentHashMap(256);
// 二级缓存Map 存放不完整的Bean(只实例化完,还没属性赋值、初始化)
private final Map<String, Object> earlySingletonObjects = new ConcurrentHashMap(16);
// 三级缓存Map 存放一个Bean的lambda表达式(也是刚实例化完)
private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap(16);

发现两个Bean循环依赖时

当Spring发现两个或更多个bean之间存在循环依赖关系时

当A和B相互依赖时,若先创建实例A,则整个调用过程如下:

简化图如下

应用架构三级缓存

概述

应用架构三级缓存的时候,一般说JVM级别的、分布式缓存级别的、数据库级别

众所周知 MySQL 数据库会将数据存储在硬盘以防止掉电丢失,但是受制于硬盘的物理设计,即便是目前性能最好的企业级 SSD 硬盘,也比内存的这种高速设备 IO 层面差一个数量级
典型的 “读多写少” 的场景,需要在设计上进行数据的读写分离,数据写入时直接落盘处理,
占比超过 90% 的数据读取操作时则从以 Redis 为代表的内存 NoSQL 数据库提取数据,利用内存的高吞吐瞬间完成数据提取,这里 Redis 的作用就是我们常说的缓存。

二级缓存架构

二级缓存架构

​​​​​​​​​​​​​​ Java 的应用端多级缓存

到此这篇关于三级缓存的文章就介绍到这了,更多相关三级缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文