缓存

  • Web 缓存是可以自动保存常见文档副本的HTTP 设备。当Web 请求抵达缓存时,如果本地有“已缓存的”副本,就可以从本地存储设备而不是原始服务器中提取这个文档。
  • 使用缓存的优点:
    • 缓存减少了不必要的数据传输,节省了你的网络带宽
    • 缓存缓解了网络瓶颈的问题,不需要更多的带宽就能够更快的加载页面
    • 缓存降低了对原始服务器的要求。服务器可以更快地响应,避免过载的出现(瞬时拥塞)
    • 缓存降低了距离时延,因为从较远的地方加载页面会更慢一些。
命中和未命中的
  • 缓存命中:可以用已有的副本为某些到达缓存的请求提供服务。
  • 缓存未命中:其他一些到达缓存的请求可能会由于没有副本可用,而被转发给原始服务器。
再验证
  • 再验证:原始服务器的内容可能会发生变化,缓存要不时对其进行检测,看看他们保存的副本是否仍是服务器上最新的副本。这些新鲜度检测被称为“再验证”。
  • 缓存可以在任意时刻以任意的频率对副本进行再验证。但由于缓存中通常会包含数百万的文档,而且网络带宽是很珍贵的,所以大部分缓存只有在客户端发起请求,并且副本需要检测的时候,才会对副本进行再验证。
  • 缓存对缓存的副本进行再验证时,会向原始服务器发送一个小的再验证请求。如果内容没有变化,服务器会以一个小的304 Not Modified 进行响应。只要缓存知道副本仍然有效,就会再次将副本标识为暂时新鲜的,并将副本提供给客户端,这被称为再验证命中或者缓存命中。这种方式没有从服务器中获取对象数据,所以比缓存未命中快一点。
  • 成功的再验证比缓存未命中要快,失败的在验证几乎和未命中的速度一样。
  • 再验证未命中:如果服务器对象与缓存副本不同,服务器向客户端发送一条普通的、带有完整内容的HTTP 200 OK 响应。
  • 对象被删除:如果服务器对象已经被删除了,服务器就回送一个404 Not Found 响应,缓存也会将其副本删除。
命中率
  • 有缓存提供服务的请求所占的比例被称为缓存命中率,有时也称为文档命中率。缓存的管理者希望缓存的命中率接近100%。缓存的好处就是,即使是中等规模的缓存,其所包含的常见文档也足以显著地提高性能、减少流量。缓存会努力确保有用的内容保存在缓存中。
字节命中率
  • 字节命中率表示的是缓存提供的字节在传输的所有字节中所占的比例。通过这种度量方式,可以得知节省流量的程度。100%的字节命中率说明每个字节都来自于缓存,没有流量流到因特网上去。
    文档命中率说明阻止了多少通往外部网络的Web 事务。事务有一个通常都很大的固定时间成分,(比如,建立一条到服务器的TCP 连接),提高文档命中率对降低整体延迟(时延)很有好处。字节命中率说明阻止了多少字节传向因特网。提高字节命中率对节省带宽很有利。
私有缓存
  • 私有缓存不需要很大的动力和储存空间,这样就可以将其做的很小,很便宜,Web 浏览器中有内建的私有缓存----大多数浏览器都会将常用的文档缓存在你个人电脑的磁盘和内存中,并且允许用户去配置缓存的大小和各种设置。
公有代理缓存
  • 特殊的共享代理服务器,代理缓存会从本地缓存中提供文档,或者代表用户与服务器进行联系。公有缓存会接受来自多个用户的访问,所以通过它可以更好地减少不必要的流量。
代理缓存的层次结构
  • 在较小的缓存中未命中的请求会导向较大的父缓存,由他来为剩下的那些“提炼过的”流量提供服务。其基本思想就是在靠近客户端的地方使用小型的廉价缓存,而更高层次中,则逐步采用更大、功能更强的缓存来装载多用户共享的文档。
  • 我们希望大部分用户都能在附近的第一级缓存中命中。如果没有命中,较大的父缓存可能能够处理他们的请求。在缓存层次结构很深的情况下,请求可能要穿过很长一溜缓存,使每个拦截代理都会添加一些性能损耗,当代理链路变的很长的时候,这种性能损耗会变的非常明显。
缓存的处理步骤
接收----缓存从网络中读取抵达的请求报文
解析------缓存对报文进行解析,提取出URL 和各种首部
查询----缓存查看是否有本地副本可用,如果没有,就获取一份副本(并将其保存在本地)
新鲜度检测---- 缓存查看已缓存副本是否足够新鲜,如果不是,就询问服务器是否有任何更新
  • HTTP 通过缓存将服务器文档的副本保留一段时间。在这段时间里,都认为文档是“新鲜的”,缓存可以在不联系服务器的情况下,直接提供该文档。但一旦已缓存副本停留的时间太长,超过了文档的新鲜度限值,就认为对象“过时“了,在提供该文档之前,缓存要再次与服务器进行确认,以查看文档是否发生了变化。
创建响应----缓存会用新的首部和已缓存的主体来构建一条响应报文
发送-----缓存通过网络将响应发回给客户端
日志----- 缓存可选地创建一个日志文件条目来描述这个事务

在这里插入图片描述

文档过期
  • 通过特殊的HTTP Cache-Control 首部和 Expires 首部,HTTP 让原始服务器向每个文档附加了一个 ”过期日期“ 。在缓存文档过期之前,缓存可以以任意频率使用这些副本,而无需与服务器联系-----当然客户端请求中包含有阻止提供以缓存或未验证资源的首部。但一旦以缓存文档过期,缓存就必须与服务器进行核对,询问文档是否被修改过,如果被修改过,就要获取一份新鲜的(带有新的过期日期)的副本。
过期日期和使用期
  • 服务器用 HTTP/1.0+ 的Expires 首部或者 HTTP/1.1 的Cache-Control:max-age 响应首部来指定过期日期,同时还会带有响应主体。Expires 首部和Cache-Control:max-age 首部所做的事情本质上是一样的,但由于Cache-Control 首部使用的是相对时间而不是绝对时间,所以我们更倾向于使用比较新的Cache-Control 首部。绝对日期依赖于计算机时钟的正确设置。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值