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 
    	// 并检查结果是否超过缓存的最大或者最小新鲜度
    

      

      

  • 相关阅读:
    Struts2SpringHibernate整合示例,一个HelloWorld版的在线书店(项目源码+详尽注释+单元测试)
    Java实现蓝桥杯勇者斗恶龙
    Java实现 LeetCode 226 翻转二叉树
    Java实现 LeetCode 226 翻转二叉树
    Java实现 LeetCode 226 翻转二叉树
    Java实现 LeetCode 225 用队列实现栈
    Java实现 LeetCode 225 用队列实现栈
    Java实现 LeetCode 225 用队列实现栈
    Java实现 LeetCode 224 基本计算器
    Java实现 LeetCode 224 基本计算器
  • 原文地址:https://www.cnblogs.com/pandang/p/5613197.html
Copyright © 2011-2022 走看看