我们编程中遇到各式各样的缓存。但你了解缓存是用来干嘛的吗?
一、缓存是什么?
维基百科的定义:
- 缓存:存储在计算机上的一个原始数据复制集,以便于访问。
简单地说,缓存就是一种快速响应的技术。比如,CPU的高速缓存。学过操作系统的同学,一定对下图特别熟悉,CPU多级缓存。CPU CACHE存在的目的就是为了解决CPU的频率与内存访问速度的不一致。
image.png
二、缤纷烦乱的缓存
既然cpu缓存的目的是消除cpu频率与内存访问的速度不一致,那网络系统中的缓存的目的是什么?
image.png
看上图,我们将上图的缓存分为三种。
1.客户端缓存
我们知道每次网络请求都是毫秒级,而将访问的结果缓存在本地可以将速度提升数个数量级,并且也减少了服务侧的压力。例如我们的DNS就会缓存在浏览器中,一些js等静态文件浏览器也可能会缓存。所以客户端缓存的主要目的是减少对那些读多写少的数据的网络访问。
2.服务端本地缓存
上图CPU的多级缓存,一般的教科书上还会在Main memroy下在扩展一层--持久化层。而持久化层的访问通常是毫秒级的,所以通常,我们会通过本地缓存来缓存一些读多写少的热点数据。比如nginx的缓存,数据库的查询缓存。
3.分布式缓存
我们一般将数据持久化到DB中(大数据,日志,大文件一般由其他持久化中间件支撑),而很多对DB的访问请求是非常耗时的,这种情况在高并发的网络环境尤为明显。而分布式缓存的一个主要应用场景就是缓存读多写少的DB数据,或者一些耗时非常久的复杂运算数据。
三、总结
缓存的原理就是将数据副本存入速度更快的存储设备,将数据放到与使用者更近的位置。
最后祭上我的xmind。
image.png
网友评论