如果这是第二次看到我的文章,欢迎文末扫码订阅我个人的公众号(跨界架构师)哟~
每周五11:45 按时送达。当然了,也会时不时加个餐~
本文长度为3578字,建议阅读10分钟。
坚持原创,每一篇都是用心之作~
此前的「伸缩性」章节结束了,此文是「高性能」章节的第一篇。
只要是位正儿八经的程序员自然知道「缓存」是什么,甚至我司的很多做运营的小姐姐现在和程序员小哥哥的交流中都时不时冒出「缓存」字眼,让人压力山大。(本文讨论的「缓存」皆指的是软件层面运用的缓存)
大家都知道的一点是,缓存可以让原本打开很慢的页面,变得能“秒开”。你平时访问的APP、网站几乎都有涉及到缓存的运用。
那么,缓存除了能加速数据的访问之外,还有什么作用呢?
另外,任何事物都有两面性,我们如何才能将缓存的优点发挥得淋淋尽致,同时避免掉到它的弊端中呢?
Z哥今天想分享给你的就是我对缓存的理解和运用的思路,希望对你有所启发。
「缓存」能做什么?
正如前面所说,大家最普遍的理解就是当我们遇到某个页面打开很慢的时候,会想到引入缓存,这样页面打开就快了。
其实快和慢都是相对的,从技术角度来说,缓存之所以快是因为缓存是基于内存去建立的,而内存的读写速度比硬盘快X倍,所以用内存来代替硬盘作为读写的介质自然能大大提高访问数据的速度。
这个过程大致是这样的,通过在内存中存储访被问过的数据供后续访问时使用,以此来达到提速的效果。
其实除此之外,缓存还有另外2个重要的运用方式,「预读取」和「延迟写」。
预读取
预读取就是预先读取将要载入的数据,也可以称作「缓存预热」。就是在系统对外提供服务之前,先将硬盘中的一部分数据加载到内存中,然后再对外提供服务。
为什么要这样做呢?因为有些系统一旦启动就要面临上千上万的请求进来(在一些toC的项目尤其如此),如果直接让这些请求打到数据库上,非常大的可能是数据库压力暴增,直接被干趴,无法正常响应。
为了缓解这个问题,需要通过「预读取」来解决。
可能你会问,哪怕用了缓存还是扛不住呢?那就是做横向扩展+负载均衡的时候到了。(可以点击文末链接阅读之前的《弹性架构》系列&