计算机网络中缓存技术,编程达人

计算机缓存也就是通常说的Cache,对计算机编程有所了解的应该都知道,缓存常与Redis联系在一起,但是Redis仅仅是应用中的一部分。

1、浏览器缓存

浏览器面对的问题是网络访问的速度远远低于本地访问的速度,每次都访问造成网络开销太大,于是就增加了一个中间层:开辟“缓存”区域,缓存JS, HTML, CSS,图片等各种文件。浏览器遵循一定的规则来判断什么时候用缓存中的文件,什么时候去访问服务器的新文件。在服务器发给浏览器的响应中,有expires, max-age, last-modified等,Header, expires 和 max-age 定义了一个资源的过期时间, last-modified和Etag用来检查一个资源在服务器端有没有变化。

c56ec5fb28cf8bf6771f454e02ed4569.png

浏览器缓存示意图

流程如下:

地址栏中输入网址,按回车以后浏览器会使用Expires,max-age来查看本地缓存的内容是否失效,如果没有,就直接使用 。

浏览器刷新按钮的时候浏览器不再考虑Expires,max-age, 而是把Last-Modified / ETag 发到服务器去,问问服务器,这个文件有更新没有?如果没有,那就用本地缓存的文件,如果有更新,用服务器端最新的。

强制刷新的时候不使用任何缓存,直接向服务器发出新请求。

e948ea993bf3c995954e7d9c35c14967.png

数据配置项

2、CDN

如果客户端离服务器距离比较远,网速会慢,体验会差;海量的用户给后端服务器带来巨大压力,所以CDN就采用了就近访问的方案:把后端服务器的数据数据复制多份,挪到离客户端比较近的“服务器中,不但减少了访问的时间,还大大降低了 “中央”服务器的负载。 浏览器缓存和CDN是配合使用的, 浏览器的本地缓存失效以后,就需要向后端服务器来获取了,但是如果系统有CDN,浏览器还可以就近访问CDN,这样用户体验就不会差。

5e088dd0e5d8945da3c1820885aa19ae.png

是否使用CDN对比

3、Page Cache

操作系统的时间是按纳秒为单位的,虽然内存和硬盘都在同一台机器中,没有网络开销,但是硬盘实在是太慢,比内存慢几万倍, 内存等不及。 所以操作系统也增加了一个抽象层:Page cache , 把硬盘的文件缓存在其中。 几乎所有的文件读写操作都依赖Page Cache,在向硬盘写入文件的时候,并不是直接把文件内容写入硬盘以后才返回的,而是写入到内核的Page Cache就直接返回了。 当从硬盘读取文件时,也不是直接把数据从硬盘复制到用户态的内存,而是先复制到内核的Page Cache ,然后再复制到用户态的内存。

4、应用程序缓存

应用程序缓存大家都很熟悉, 因为数据库访问速度慢,无法应对大量的并发访问,所以增加一个缓存中间层,把最火热的数据从数据库中取出,放到快速访问的内存中。应用程序的缓存也是个双刃剑,虽然提升了访问效率, 但带来了很多问题:

82b4ebb648dfe91d32480851c76d2d1f.png

应用程序、缓存、数据库三者关系图

代码变复杂

需要处理缓存和数据库之间的数据一致性问题

存在穿透,雪崩等问题

应用程序缓存现在已经变成了分布式的集群形式,数据管理很麻烦。

5、CPU缓存

虽说内存速度快, 可是在CPU面前,内存也只能屈居下风,CPU比内存快的多得多,数据和指令必须从内存加载到CPU才能执行, 为了解决速度匹配问题就在CPU内增加缓存中间层,不过必须用硬件来实现。

db954803b7ef6807c61fcc54181a73c6.png

CPU、CPU缓存、内存关系图

CPU的缓存包括L1、L2、 L3这三级Cache,把最火热的访问数据放入到其中。

在L1 Cache 最靠近CPU,速度最快,可以分为指令Cache (CPU要执行的指令)和数据Cache(指令要操作的数据)。 CPU Cache 和上面提到的各种Cache比起来,小得可怜,也就是几百K到几M。 所以这些Cache要想发挥真正的作用,必须得依赖规矩局部性原理:

时间局部性:如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。

空间局部性:指一旦程序访问了某个存储单元,则不久之后。其附近的存储单元也将被访问。

总结

对于数据读写不匹配的问题,一般的解决办法就是增加一个空间层,用空间的冗余来换取时间的匹配,同时要遵循下列原则:

数据的读操作远大于写操作

数据计算过程比较耗时

数据是某个数据源的数据备份

数据访问遵循“局部性原理”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值