缓存知识前奏

2020-05-13  本文已影响0人  麟之趾a

程序运行的局部性

时间局部性:一个数据访问后,很快被再次访问
空间局部性:一个数据被访问时,其周边数据也有可能被访问到网页

缓存概念

热区

我们一个站点可能20%的页面,承担80%的流量,我们把这20%称为热区

失效性

缓存空间耗尽:LRU,最近最少使用的被清除
过期时间:缓存清理(即空间没有耗尽,缓存到了过期时间也要清理。)

命中率

衡量缓存的指标,是缓存命中率
页面命中率:基于页面数量进行衡量
字节命中率:基于页面体积进行衡量

命中率低的原因

缓存空间太小: 导致大量LRU缓存被删除了
缓存时间太短: 数据刚刚缓存,就过期了(原数据更新频繁)
缓存没有预热
我们要缓存读多写少的页面

web缓存

私有数据:用户私有信息,只能为特定用户的缓存(带cookie信息的,但电商里,用户浏览的商品也有可能带有cookie信息),因此我们要区分私有数据和公有数据
公有数据:放在公共区域,能被所有用户缓存命中的
缓存键:如果键带有私有数据,那只能被私有缓存
因此我们要在缓存中,区分有哪些是私有缓存哪些数据可以被公有缓存

缓存分类

代理缓存(递归式缓存)

image.png

当用户请求,缓存没有命中,缓存服务器会自动请求后端节点,拿到数据后。返回给客户端
http协议的所有连接都为代理缓存,squid,varnish

旁挂式缓存

image.png

客户端请求缓存,当缓存不存在时,客户端就会请求服务器,拿到数据,自行决定是否缓存到缓存服务器 memcache

HTTP 缓存概念

HTTP1.1改善了过期缓存机制,和增加了条件缓存机制(当缓存过期了,问后端服务器,我这个缓存要不要更新)

过期缓存

HTTP1.0

Expires:过期时间 定义什么时候缓存失效,但如果浏览器和服务器的时区不一致会出现问题

HTTP1.1

cache-Control:maxage 缓存数据的最大存活时间
cache-Control:s-maxage公共数据缓存的最大存活时间

条件式请求缓存

Last-Modified/If-Modified-since基于文件修改时间戳来判断
Etag/If-None-Match 基于Etag标记,基于文件内容校验码进行对比

image.png
基于Etag判断
客户端拿到数据向后端请求,我缓存中的数据是否和后端服务器的数据内容一致,如果一致,后端服务器返回304,如果不一致返回200
基于时间戳判断
客户端缓存中的数据,和后端服务器的数据修改时间戳进行对比,是否比我更新,如果比我更新服务器返回200,如果一致返回304

过期缓存和条件式缓存一起工作

当客户端请求数据缓存到了本地,当过期的缓存时间过期了,缓存就会向服务器问,我这个缓存是否有变动,如果有变动服务器返回200,如果没有变动返回304,之后缓存继续过期缓存

HTTP 请求报文中缓存

Cache-Control:no-cache不用缓存响应报文,强制刷新

HTTP 响应报文

      Cache-Control:
              public  公有缓存
              private 私有缓存
              no-cache:告诉缓存系统,内容可以缓存。但过期缓存没用,必须每次向服务端请求缓存的有效性(条件式缓存)
              no-store: 不能缓存
              must-relvalidate: 必须重新效验缓存,no-cache一样
              proxy-revailddate:由代理服务器进行重新效验
              max-age: 缓存数据的存活时间
              s-maxage:公共数据的缓存存活时间
上一篇 下一篇

猜你喜欢

热点阅读