写点什么

架构师 0 期 | 缓存 -- 提升性能大杀器

用户头像
刁架构
关注
发布于: 2020 年 07 月 08 日
架构师 0 期 | 缓存--提升性能大杀器

啥是缓存?

缓存是介于数据访问者和数据源之间的一种高速存储,当数据需要多次读取的时候,用于加速读取速度。

一般来说,数据的使用原则都是二八原则,比如微博,经常被访问的数据一般都是明星发布的微博之类的数据,这些数据会被大量的人访问,而普通人的数据访问量很小,甚至没有。

解决方案就是使用一种更快的存储介质放一小部分经常使用的数据(热点数据),供系统反复使用。以此提升系统性能。



缓存的关键指标

是缓存命中率。 命中率越高,效果越好。



影响命中率的主要指标

  1. 缓存键集合大小

  2. 缓存可使用内存空间

  3. 缓存对象的生存时间



缓存类型

通读缓存(read-through)

  1. 代理缓存

  2. 反向代理缓存

  3. CDN缓存





旁路缓存(cache-aside)

  1. CDN





缓存为啥能大幅提高性能

  1. 使用介质是内存,比磁盘快

  2. 可以缓存中间形态,不用再计算

  3. 降低数据库、磁盘、网络的负载压力



缓存虽好处多多,使用还得看场景

  1. 频繁修改的数据,不适合。 读写比例至少是2:1以上,才有意义。 否则写一次缓存,就对一次不如直接去磁盘读了。

  2. 没热点,不适合。 遵循二八定律,内存空间有限,热点集中在一小部分才适合用。

  3. 数据不一致、脏读。 一般会设置数据失效时间,超时的数据就需要重新读取。

  4. 缓存雪崩。 当缓存大量不可用时,就导致使数据库崩溃,连锁反应,全部崩溃。这种情况甚至不能重启缓存服务器和数据库服务器恢复网站。因为,重启的缓存数据库是空的,请求会直接穿透到达数据库服务器,数据库根本无法承受这种规模的流量,只能等半夜,流量高峰过去,才能恢复。

  5. 缓存预热。 热点数据可能需要通过LRU算法一点点淘汰筛选出来的,时间过长,所以提前预热。

  6. 缓存穿透。 恶意攻击某个不存在的数据,会直接到数据库。看起来就像穿透一样。数据库压力太大,就崩了。 简单的策略计是将不存在的数据也缓存起来(value值为null),设定一个较短的失效时间。



发布于: 2020 年 07 月 08 日阅读数: 77
用户头像

刁架构

关注

叫我刁架构 2017.10.25 加入

预备备网红首席架构师,移动端开发者,边缘设计支持者。

评论

发布
暂无评论
架构师 0 期 | 缓存--提升性能大杀器