zoukankan      html  css  js  c++  java
  • HTTP 使用期及新鲜度算法

    使用期算法:

      /*
       * age_value 当代理服务器用自己的头部去响应请求时,Age标明实体产生到现在多长时间了。
       * date_value HTTP 服务器应答中的Date字段 原始服务器
       * request_time 缓存的请求时间
       * response_time 缓存获取应答的时间
       * now 当前时间
       */
    
      apparent_age = max(0, response_time - date_value); //缓存收到响应时响应的年龄 处理时钟偏差存在时,可能为负的情况
    
      corrected_received_age = max(apparent_age, age_value);  //  容忍Age首部的错误
    
      response_delay = response_time - request_time; // 处理网络时延,导致结果保守
    
      corrected_initial_age = corrected_received_age + response_delay;
    
      resident_time = now - response_time; // 本地的停留时间,即收到响应到现在的时间间隔
    
      current_age   = corrected_initial_age + resident_time;
      
      // 各个计算都极可能保守
      // 响应使用期 = max( 响应时间 - 响应头部date,响应中age );
      // 传输延迟时间 = 响应时间 - 请求时间 // 使用期中至少不低于这个指
      // 停留缓存时间 = 当前时间 - 响应时间
      // 保守使用期 = 响应响应使用期 + 传输延迟时间 + 停留缓存时间 // 这个值不是精准,是保存估计的值  
    

    新鲜度算法:

     /**
         * $heuristic 启发式过期值应不大于从那个时间开始到现在这段时间间隔的某个分数
         * $Max_Age_value_set  是否存在Max_Age值  Cache-Control字段中“max-age”控制指令的值
         * $Max_Age_value  Max_Age值
         * $Expires_value_set 是否存在Expires值
         * $Expires_value Expires值
         * $Date_value Date头部
         * $default_cache_min_lifetime 
         * $default_cache_max_lifetime
         */
        function server_freshness_limit() {
            global $Max_Age_value_set, $Max_Age_value;
            global $Expires_value_set, $Expires_value;
            global $Date_value, $default_cache_min_lifetime, $default_cache_max_lifetime;
     
            $factor = 0.1; //典型设置为10%
     
            $heuristic = 0; //  启发式 默认为0
     
            if ($Max_Age_value_set) {   // 优先级一为 Max_Age
                $freshness_lifetime = $Max_Age_value;
            }elseif($Expires_value_set) {  //   优先级二为Expires
                $freshness_lifetime = $Expires_value - $Date_value;
            }elseif($Last_Modified_value_set) { //  优先级三为Last_Modified
                $freshness_lifetime = (int)($factor * max(0, $Date_value - $Last_Modified_value ));
                $heuristic = 1; //  启发式
            }else{  
                $freshness_lifetime = $default_cache_min_lifetime;
                $heuristic = 1; //  启发式
            }
     
            if ($heuristic) {
                $freshness_lifetime = $freshness_lifetime > $default_cache_max_lifetime ? $default_cache_max_lifetime : $freshness_lifetime;
                $freshness_lifetime = $freshness_lifetime < $default_cache_min_lifetime ? $default_cache_min_lifetime : $freshness_lifetime;
            }
     
            return $freshness_lifetime;
     
        }
    	
    	// 新鲜度算法
    	// max-age 》 expires - date_header 》 factor * max(0,date_header - last_modified_date)》default_cache_min_date 
    	// 并检查结果是否超过缓存的最大或者最小新鲜度
    

      

      

  • 相关阅读:
    NLP 中的embedding layer
    Java Web -- Servlet(5) 开发Servlet的三种方法、配置Servlet具体解释、Servlet的生命周期(2)
    我对REST的理解
    QML 与 C++ 交互之工厂方法
    Hive分析窗体函数之LAG,LEAD,FIRST_VALUE和LAST_VALUE
    【C/C++】:用C实现输出日期的阴历日子
    Android6.0执行时权限解析,RxPermissions的使用,自己封装一套权限框架
    统计报表
    2015 HDU 多校联赛 5363 Key Set
    查看sedna创建的数据库和集合,文档之类
  • 原文地址:https://www.cnblogs.com/pandang/p/5613197.html
Copyright © 2011-2022 走看看