关于缓存

  1. 缓存更新策略

    • FIFO[First In First Out]。最先进入缓存的数据在缓存空间不足情况下最先清理出去
    • LFU[Less Frequenctly Used]。最少被使用的元素被清理掉,需要缓存的元素有hit属性。
    • LRU[Least Recently Used]。最近最少使用的元素被清理,要求缓存的元素有时间戳。
  2. 文件缓存
    优点:

    • 磁盘容量大,可以存放足够多的数据。
    • 磁盘价格远低于内存价格,且更稳定可靠,断电数据不丢失,存储也简单可靠。
    • 随着固态硬盘(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);
      
  3. 客户端缓存(浏览器缓存)
    如果缓存的副本含有一下信息,内容被认为足够新:

    • 含有完整的过期时间和寿命控制头信息,并且内容仍在保鲜期内。
    • 浏览器已经使用过缓存副本,并且在一个会话中已经检查过内容的新鲜度。
    • 缓存代理服务器近期内已经使用过缓存副本,并且内容的最后更新时间在上次使用期之前。
    • 够新的副本将直接从缓存中送出,而不会向源服务器发送请求。
      如果缓存的副本已经太旧了,缓存服务器将向源服务器发出校验请求,用于确定是否可以继续使用当前拷贝继续服务。

    HTTP请求缓存过程:

    1. 在客户端,通过浏览器发出第一次请求,根据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"
      
    2. 客户端第二次请求此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起一个标识,返回给客户端

你可能感兴趣的:(关于缓存)