缓存简介

目录

布置缓存的目的

适合存放缓存的地方

哪些位置适合放缓存


布置缓存的目的

1,压力均分,其本质就是用空间换时间,牺牲了部分空间,换取了整个系统效率的提升,像数据库这样很容易出现读写瓶颈的地方,把查询的一些数据,查过来运算好了然后放在缓存里,再用的时候丢出去就好了

2,简化处理流程,比如我要获取用户的资料,这个资料可能分布在各个地方,我们就可以把这个资料整合在一起,然后把结果放在缓存里,提升整个流程的处理速度

3,把极少变动的数据进行持久化,或者完整的储存到硬盘里,这样不仅减少了数据库的读取,也减少了数据的运算量

适合存放缓存的地方

看具体的业务需求,一般来说:

  • 实时性要求不严格,防止幻读
  • 经常访问但改动不频繁(频繁用到的数据,也就是热数据)

哪些位置适合放缓存

一个标准的php网站包含以下几块,由客户端浏览器发送和接收数据,然后又web server接收用户的请求,判断是静态资源还是动态资源,如果是静态资源则直接调取文件系统,返回静态资源,如果是动态数据则调取php程序进行运算,如果还涉及到数据库里的东西,则连接数据库,并读取这些数据

如果数据量非常大的时候,有无数个浏览器同时发送请求,web server可能就忙不过来了,如果是静态资源还好,读出来就可以给浏览器了,而不适合直接返回的东西就需要php程序介入了,其实php现在已经快很多了,php7在内核机制上进行了大幅度修改,根据测算,php7比php5.6快了将近两倍,如果代码不是写的特别烂,php一般不容易出现瓶颈问题,但是数据库这一块就很容易出现瓶颈了,涉及到数据库的读写速度以及加减锁,导致出现巨量的耗时情况,除此之外,对文件系统及硬件相关的地方,也会影响到整个系统的性能,比如服务器的ssd储存介质肯定比hdd要快很多


首先对于浏览器来说,浏览器本身就有一个缓存机制,浏览器在访问过网站后会把一些静态资源像html,css,js,图片直接保存一份放在你的电脑里,这样下一次请求还是相同的数据,而且数据没有过期的时候,就直接访问本地的文件,减少了对服务器的压力,其次浏览器想要访问服务器的话,需要解析域名,在解析成ip,这中间有一个dns缓存,dns缓存目的是把域名和ip的对应关系保存下来,访问的时候就能直接访问ip,不用重新请求域名服务器了,还有在移动互联网时代,有着流量费的问题,uc浏览器,qq浏览器,都有极简模式,也叫省流量模式,他的本质是在浏览器和服务器之间又加了一个中间的服务器,这个服务器接收中间的一些数据,并对这些数据进行精简和压缩,把传输的内容变少后在传送给手机浏览器,从而减少了用户端流量的一些支出

其次是cdn,cdn的原理就是把很远的东西放在离你很近的地方,通过这样的方式,提高了你的访问速度,从一定的角度来说,cdn也可以称作缓存,cdn适合放一些静态储存的数据,这些数据几乎不会发生变化,可以把这些数据复制到全国各个节点上,判断用户位置,把用户引导到最近的节点,大幅度减少了用户访问信息的时间,但是其成本比较高,需要在各地部署服务器,同时,原始数据变更时,会将数据推送到各个节点上去,这样可能出现各个节点数据更新时间不一致

常用的web服务器nginx,apache,流量进入web server后,如果是静态资源,不需要解析,速度是非常快的,而php程序执行比较耗时,因此引入了一个概念叫静态化,静态化是把一些动态处理的结果转换成静态资源,一般静态化包含全站静态化和碎片静态化,运行结果在进行静态化后,就不需要php程序在进行处理了,也不需要读取数据库了,大幅度降低了对后续流程的流量冲击,也是因为这样,他和cdn有着同样的问题,他适合放一些变化比较少的东西,如果对资源进行频繁的修改,那就需要估算一下静态化和非静态化那种成本更低了

下一个过程是php和数据库之间的部分,这一部分出现瓶颈的概率是最高的,解决这一问题的软件也比较多,因为内存的读取速度要远高于硬盘,所以一般我们把数据库中的数据取出来然后更新到内存里,后续的处理我们读取内存就可以了,或者我们把php计算的结果放在内存里,如果以后有相同的计算,我们直接从内存里取出对应的记录

对于数据库来说,数据库有查询缓存,如果是相同的查询,他会把结果直接进行输出,当然每个数据库的查询和缓存机制也是有区别的

除此之外,web server里的nginx,apache,以及php本身也有一些缓存

最后对于操作系统来说,有Disk Cache的机制,会对一些可能用到的文件缓存到内存中,大大加快了文件的读取速度尤其是刚刚被写入或者读取过的文件,可以用free命令查询到,整个机制不需要我们干预,由系统自己判定,

发布了107 篇原创文章 · 获赞 18 · 访问量 6315

猜你喜欢

转载自blog.csdn.net/qq_43109978/article/details/101260520