-
缓存更新策略
- FIFO[First In First Out]。最先进入缓存的数据在缓存空间不足情况下最先清理出去
- LFU[Less Frequenctly Used]。最少被使用的元素被清理掉,需要缓存的元素有hit属性。
- LRU[Least Recently Used]。最近最少使用的元素被清理,要求缓存的元素有时间戳。
-
文件缓存
优点:- 磁盘容量大,可以存放足够多的数据。
- 磁盘价格远低于内存价格,且更稳定可靠,断电数据不丢失,存储也简单可靠。
- 随着固态硬盘(SSD)的出现,硬盘读写速度得到极大提高,达到500MB/s。
- 扩展容易,可以使用磁盘阵列,分布式处理等大规模的存储和管理。
应用:
模板:把动态的php代码“编译”成静态HTML文件,下次读取时直接读取静态文件(判断静态文件是否过期),不需再“编译”。
-
无限分类:可以将分类从数据库中读取之后,存入文件中,因分类不常变更,下次直接从文件中读取。
$a = [ "a"=>["name"=>"nannan", "age"=>24], "b"=>["name"=>"coco", "age"=>22] ]; $t = var_export($a, true); file_put_contents("a.php", $t); $array = file_get_contents("a.php"); eval("\$data=$array;"); var_dump($data);
-
客户端缓存(浏览器缓存)
如果缓存的副本含有一下信息,内容被认为足够新:- 含有完整的过期时间和寿命控制头信息,并且内容仍在保鲜期内。
- 浏览器已经使用过缓存副本,并且在一个会话中已经检查过内容的新鲜度。
- 缓存代理服务器近期内已经使用过缓存副本,并且内容的最后更新时间在上次使用期之前。
- 够新的副本将直接从缓存中送出,而不会向源服务器发送请求。
如果缓存的副本已经太旧了,缓存服务器将向源服务器发出校验请求,用于确定是否可以继续使用当前拷贝继续服务。
HTTP请求缓存过程:
-
在客户端,通过浏览器发出第一次请求,根据HTTP协议规定,浏览器会向服务器传送报头(HTTP Request Header),服务器端响应同时记录相关属性标记(HTTP Reponse Header),服务器端返回格式如下
HTTP/1.1 200 OK Date:Tue,03 Mar 2009 04:58:40 GMT Content-Type:image/jpeg Content-Length:83185 Last-Modified:Tue,24 Feb 2009 08:01:04 GMT Cache-Control:max-age=2592000 Expires:Thu,02 Apr 2009 05:14:08 GMT Etag:"5d8c72a5edda8d6a:3239"
-
客户端第二次请求此URL时,服务器端响应请求,并查询到标记文件没有发生改动,服务器端返回304,浏览器收到此状态码后,直接从本地缓存中读取
HTTP/1.x 304 Not Modified Date:Tue,03 Mar 2009 05:03:56 GMT Content-Type:image/jpeg Content-Length:83185 Last-Modified:Tue,24 Feb 2009 08:01:04 GMT Cache-Control:max-age=2592000 Expires:Thu,02 Apr 2009 05:14:08 GMT Etag:"5d8c72a5edda8d6a:3239"
HTTP请求标识
- Expires
过期时间,告诉浏览器相关副本在多长时间是新鲜的,过了这个时间,缓存器向服务器发送请求,检查文档是否被修改。这个字段对静态图片文件等特别有用,因为这些图片修改很少。可以给他们一个特别长的过期时间。 - Cache Control
通过该属性,可以全面让网站发布者全面控制内容,并定位过期时间的限制。
有用的Cache Control信息包括:- max age:缓存过期时间 [秒]
- public: 标记认证内容也可以被缓存,一般经过http认证的内容不会被自动缓存。
- no cache:强制不缓存。
- must revalidate:在保鲜期内,如果用到了该资源,应当向服务器确认一下资源是否为最新的。
- last modified: 文档最后修改时间。第一次访问时,会返回此文件在服务端的最后修改时间,第二次访问时,请求头会带上If-Modified-Since,值为这个最后修改时间,以此判断上次之后,该文件是否修改过。
如果没有修改,服务器返回304状态,内容为空,否则重新发出资源,并返回新的修改时间。
- etag: 和last modified一样起到唯一标识的作用,即给请求url起一个标识,返回给客户端
关于缓存
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 前端开发者丨http请求 https:www.rokub.com 前言见解有限, 如有描述不当之处, 请帮忙指出,...