缓存是为了调节速度不一致的两个或多个不一样的物质的速度,在中间对速度较快的一方起到一个加速访问速度较慢的一方的做用,好比CPU的一级、二级缓存是保存了CPU最近常常访问的数据,内存是保存CPU常常访问硬盘的数据,并且硬盘也有大小不一的缓存,设置是物理服务器的raid卡也有缓存,都是为了起到加速CPU访问硬盘数据的目的,由于CPU的速度太快了,CPU须要的数据硬盘每每不能在短期内知足CPU的需求,所以CPU缓存、内存、Raid卡以及硬盘缓存就在必定程度上知足CPU的数据需求,即CPU从缓存读取数据能够大幅提升CPU的工做效率。php
buffer:缓冲也叫写缓冲,通常用于写操做,能够将数据先写入内存在写入磁盘,buffer通常用于写缓冲,用于解决不一样介质的速度不一致的缓冲,先将数据临时写入到离本身最近的地方,以提升写入速度,CPU会把数据先写到内存的磁盘缓冲区,而后就认为数据已经写入完成,而后由内核在后续的时间在写入磁盘,因此服务器忽然断电会丢失内存中的部分数据。python
cache:缓存也叫读缓存,通常用于读操做,CPU读取文件从内存读,若是内存没有就先从硬盘读到内存在读到CPU,将须要频繁读取的数据放在离本身最近的缓存区域,下次读取的时候便可快速读取。nginx
客户端:浏览器web
内存:本地服务器、远程服务器redis
硬盘:本机硬盘、远程服务硬盘chrome
自动过时:给缓存的数据加上有效时间,超出时间后自动过时删除浏览器
过时时间:强制过时,源网站更新图片后CDN是不会更新的,须要强制是图片缓存过时缓存
命中率:即缓存的命中率安全
默认为60秒,即60秒以内在访问同一域名就不在进行DNS解析:性能优化
查看chrome浏览器的DNS缓存:
chrome://net-internals/#dns
最后修改时间:
系统调用会获取文件的最后修改时间,若是没有发生变化就返回给浏览器304的状态码,表示没有发生变化,而后浏览器就是用的本地的缓存展现资源,
Etag标记:
基于Etag标记是否一致作判断页面是否发生变化,好比基于nginx的etag on来实现。
过时时间:
以上两种都须要发送请求,即无论资源是否过时都要发送请求进行协商,这样会消耗没必要要的时间,所以有了缓存的过时时间,即第一次请求资源的时候带一个资源的过时时间,默认为30天,当前这种方式使用的比较多,可是没法保证客户的时间都是准确而且一致的,所以假如一个最大生存周期,使用用户本地的时间计算缓存数据是否超过多少天
内容分发网络,经过将服务内容分发至全国加速节点,利用全球调度系统使用户可以就近获取,有效下降访问延迟,提高服务可用性,CDN第一下降机房的使用带宽,由于不少资源经过CDN就直接返回用户了,第二解决不一样运营商之间的互联,由于可让联通的网络访问电信,电信的访问联通,起到加速用户访问的目的,第三:解决用户访问的地域问题,就近返回用户资源。
提早对静态内容进行预缓存,避免大量的请求回源,致使主站网络带宽被打满而致使数据没法更新,另外CDN能够将数据根据访问的热度不一样而进行不一样级别的缓存,例如访问量最高的资源访问CDN边缘节点的内存,其次的放在SSD或者SATA,再其次的放在云存储,这样兼顾了速度与成本。
提早对静态内容进行预缓存,避免大量的请求回源,致使主站网络带宽被打满而致使数据没法更新,另外CDN能够将数据根据访问的热度不一样而进行不一样级别的缓存,例如访问量最高的资源访问CDN边缘节点的内存,其次的放在SSD或者SATA,再其次的放在云存储,这样兼顾了速度与成本。缓存-缓存到最快的地方如内存,缓存的数据准确命中率高,访问速度就快
调度准确-将用户调度到最近的边缘节点
性能优化-CDN 专门用于缓存响应速度快
安全相关-抵御攻击
节省带宽:因为用户请求边缘节点响应,所以大幅下降到源站带宽
nginx、php等web服务能够设置应用缓存以加速响应用户请求,另外有些解释型语言好比php/python不能直接运行,须要先编译成字节码,但字节码须要解释器解释为机器码以后才能执行,所以字节码也是一种缓存,有时候会出现程序代码上线后字节码没有更新的现象。
CPU缓存(L1的数据缓存和L1的指令缓存)、二级缓存、三级缓存
磁盘缓存
RAID卡
分布式缓存:redis、memcache