朋友们,大家好呀。
正在热火朝天的进行中,之前的技术专题对于技术领域领域有所限制,那我们本期就没有明显的领域限制啦。
本期我们来聊一聊缓存的妙用和问题,说一说你是如何利用缓存解决问题,也谈一谈因为缓存又带来了哪些新的问题!
回顾一下缓存的原始意义:是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术,缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。
可以看到缓存的最初使用是作用于系统级的,但随着一代代工程师的挖掘和实战,缓存慢慢的走进了更多的生态之中,比如:浏览器缓存,后端体系中如MyBatis框架中的一级、二级缓存、基于Redis搭建的缓存服务等等,甚至为了保证网络质量不佳情况时APP的正常使用,我们也会为所有的 API 加上缓存,从另一个方面说,缓存已经成为互联网生态中必不可少的一部分。
总结一句话:缓存是提高性能最好的方式。
在缓存的设计与使用中,存在多种多样的技巧和方案,本文抛砖引玉,以Cache Aside 更新模式为例来介绍一下最常用的缓存设计方案,主要逻辑即考虑:失效、命中、更新时的动作。
失效:应用程序先从 Cache 取数据,如果没有得到,则从数据库中取数据,成功后,放到缓存中。 命中:应用程序从 Cache 中取数据,取到后返回。 更新:先把数据存到数据库中,成功后,再让缓存失效。
如此一来,便可以建立起一个简单的缓存服务,为接口提高最高效率的查询速度。 但是朋友们,重点来了,这样做真的是完美方案吗?我们会问这样的几个问题:
为什么不是写完数据库后更新缓存 如何保证缓存的命中 如何保证数据的强一致性 如何设计缓存的淘汰策略 如何有效的水平拓展缓存服务 如何配合缓存设计最大吞吐量的系统 如何做好针对缓存的监控 如何设计多级缓存