From 95c14a03bf4ba595d7496bbc8c9a5fed2c7487d6 Mon Sep 17 00:00:00 2001 From: imhuster <14797903831@163.com> Date: Sat, 18 May 2019 11:41:54 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E7=BC=93=E5=AD=98.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加了缓存位置及缓存问题相关实例 --- docs/notes/缓存.md | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/docs/notes/缓存.md b/docs/notes/缓存.md index 3e43a32b..6e6a4ac6 100644 --- a/docs/notes/缓存.md +++ b/docs/notes/缓存.md @@ -1,5 +1,5 @@ * [点击阅读面试进阶指南 ](https://github.com/CyC2018/Backend-Interview-Guide) - + * [一、缓存特征](#一缓存特征) * [二、LRU](#二lru) * [三、缓存位置](#三缓存位置) @@ -8,7 +8,7 @@ * [六、数据分布](#六数据分布) * [七、一致性哈希](#七一致性哈希) * [参考资料](#参考资料) - + # 一、缓存特征 @@ -192,6 +192,15 @@ public class LRU implements Iterable { MySQL 等数据库管理系统具有自己的查询缓存机制来提高查询效率。 +## Java 内部的缓存 + +Java 为了优化空间,提高字符串、基本数据类型包装类的创建效率,设计了字符串常量池及Byte、Short、Character、Integer、Long、Boolean这6种包装类缓冲池。 + +## CPU 多级缓存 + +为了解决CPU运算速度与主存IO速度不匹配的问题,引入了多级缓存结构,同时使用MESI等缓存一致性协议来解决多核CPU缓存数据一致性的问题。 + + # 四、CDN 内容分发网络(Content distribution network,CDN)是一种互连的网络系统,它利用更靠近用户的服务器从而更快更可靠地将 HTML、CSS、JavaScript、音乐、图片、视频等静态资源分发给用户。 @@ -238,6 +247,19 @@ CDN 主要有以下优点: 要保证缓存一致性需要付出很大的代价,缓存数据最好是那些对一致性要求不高的数据,允许缓存数据存在一些脏数据。 +## 缓存“无底洞”现象 + +指的是为了满足业务要求添加了大量缓存节点, 但是性能不但没有好转反而下降了的现象。 + +产生原因:缓存系统通常采用hash函数将key映射到对应的缓存节点,随着缓存节点数目的增加,键值分布到更多的节点上,导致客户端一次批量操作会涉及多次网络操作,这意味着批量操作的耗时会随 +着节点数目的增加而不断增大。此外,网络连接数变多,对节点的性能也有一定影响。 + +解决方案: + +- 优化批量数据操作命令; +- 减少网络通信次数; +- 降低接入成本,使用长连/连接池,NIO等。 + # 六、数据分布 ## 哈希分布