缓存的命中与未命中

  • 缓存很有帮助,但缓存无法保存世界上每份文档的副本,即便可以保持也不能进行及时的更新。
  • 缓存命中(cache hit):可以用已有的副本为某些到达缓存的请求提供服务。
  • 缓存未命中(cache miss):其他一些到达缓存的请求可能会由于没有副本可用,而被转发给原始服务器。

在这里插入图片描述

1. 再验证

HTTP 再验证 (revalidation):原始服务器的内容可能会发生变化,缓存要不时对其进行检测,看看它们保存的副本是否仍是服务器上最新的副本,进行“新鲜度检测”。

缓存可以在任意时刻,以任意的频率对副本进行再验证。但由于缓存中通常会包含数百万的文档,而且网络带宽是很珍贵的,所以大部分缓存只有在客户端发起请求,并且副本旧得足以需要检测的时候,才会对副本进行再验证。

为了有效地进行再验证,HTTP 定义了一些特殊的请求,不用从服务器上获取整个对象,就可以快速检测出内容是否是最新的。

HTTP 为我们提供了几个用来对已缓存对象进行再验证的工具,但最常用的是 If- Modified-Since 首部。将这个首部添加到 GET 请求中去,就可以告诉服务器,只有在缓存了对象的副本之后,又对其进行了修改的情况下,才发送此对象。

服务器收到 GET If-Modified-Since 请求时的 3 种情况:

  • 再验证命中(revalidate hit)或缓慢命中(slow hit):
    如果服务器对象未被修改,服务器会向客户端发送一个小的 HTTP 304 Not Modified 响应。只要缓存知道副本仍然有效,就会再次将副本标识为暂时新鲜的,并将副本提供给客户端。
  • 再验证未命中 :
    如果服务器对象与已缓存副本不同,服务器向客户端发送一条普通的、带有完整内容的 HTTP 200 OK 响应。
  • 对象被删除:
    如果服务器对象已经被删除了,服务器就回送一个 404 Not Found 响应,缓存也会将其副本删除。

在这里插入图片描述

  • 再验证命中要与原始服务器进行核对,所以会比单纯的缓存命中要慢,但它没有从服务器中获取对象数据,所以要比缓存未命中快一些。

  • 再验证未命中几乎和缓存未命中速度一样。

在这里插入图片描述

2. 缓存命中率
  • 缓存命中率(cache hit rate,或称为缓存命中比例):由缓存提供服务的请求所占的比例。有时也被称为文档命中率(document hit rate)。
  • 命中率在 0 到 1 之间, 但通常是用百分数来描述的,0% 表示每次请求都未命中(要通过网络来获取文 档),100% 表示每次请求都命中了(在缓存中有一份副本)。有时,人们会在命中率中包括再验证命中,但有时候命中率和再验证命中率是分别测量的。在检测命中率的时候,要确定自己知道什么才是“命中”。
  • 缓存的管理者希望缓存命中率接近 100%。而实际得到的命中率则与缓存的大小、缓存用户兴趣点的相似性、缓存数据的变化或个性化频率,以及如何配置缓存有关。
  • 命中率很难预测,但对现在中等规模的 Web 缓存来说,40% 的命中率是很合理的。
3. 字节命中率
  • 由于文档并不全是同一尺寸的,所以文档命中率并不能说明一切。
  • 有些大型对象被访问的次数可能较少,但由于尺寸的原因,对整个数据流量的贡献却更大。因此,有些人更愿意使用字节命中率(byte hit rate)作为度量值。
  • 字节命中率:是缓存提供的字节在传输的所有字节中所占的比例。
  • 通过这种度量方式,可以得知节省流量的程度。100% 的字节命中率说明每个字节都来自缓存,没有流量流到因特网上去。
  • 文档命中率和字节命中率对缓存性能的评估都是很有用的:
  • 文档命中率:说明阻止了多少通往外部网络的 Web 事务。事务有一个通常都很大的固定时间成分(比如,建立一条到服务器的 TCP 连接),提高文档命中率对降低整体延迟(时延)很有好处。
    字节命中率:说明阻止了多少字节传向因特网。提高字节命中率对节省带宽很有利。
4. 区分命中和未命中
  • HTTP 没有为用户提供一种手段来区分响应是缓存命中的,还是访问原始服务器得到的。在这两种情况下,响应码都是 200 OK,说明响应有主体部分。有些商业代理缓存会在 Via 首部附加一些额外信息,以描述缓存中发生的情况。
  • 客户端有一种方法可以判断响应是否来自缓存,就是使用 Date 首部。将响应中 Date 首部的值与当前时间进行比较,如果响应中的日期值比较早,客户端通常就可以认为这是一条缓存的响应。
  • 客户端也可以通过 Age 首部来检测缓存的响应,通过这个首部可以分辨出这条响应的使用期
发布了97 篇原创文章 · 获赞 222 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_32642107/article/details/102920384