使用期算法:

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

  

  

HTTP 使用期及新鲜度算法的更多相关文章

  1. HTTP权威指南 目录

    diyi部分 HTTP:Web的基础 第1章 HTTP概述 31.1 HTTP——因特网的多媒体信使 41.2 Web客户端和服务器 41.3 资源 51.3.1 媒体类型 61.3.2 URI 71 ...

  2. java垃圾回收机制,以及常用的回收算法

    记得之前去平安面试的时候,面试官问到了垃圾回收,我当时也就是说说了垃圾回收的原理,但是具体有哪些实现策略,我当时是懵的. 概念: Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定 ...

  3. Bayesian Personalized Ranking 算法解析及Python实现

    1. Learning to Rank 1.1 什么是排序算法 为什么google搜索 ”idiot“ 后,会出现特朗普的照片? “我们已经爬取和存储了数十亿的网页拷贝在我们相应的索引位置.因此,你输 ...

  4. 【PPT详解】曹欢欢:今日头条算法原理

    [PPT详解]曹欢欢:今日头条算法原理 悟空智能科技 4月8日 公众号后台回复:“区块链”,获取区块链报告 公众号后台回复:“sq”,进入区块链分享社群 热文推荐: 1000位专家推荐,20本区块链必 ...

  5. 关键词提取算法TF-IDF与TextRank

    一.前言 随着互联网的发展,数据的海量增长使得文本信息的分析与处理需求日益突显,而文本处理工作中关键词提取是基础工作之一. TF-IDF与TextRank是经典的关键词提取算法,需要掌握. 二.TF- ...

  6. B树——算法导论(25)

    B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...

  7. 分布式系列文章——Paxos算法原理与推导

    Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...

  8. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. 红黑树——算法导论(15)

    1. 什么是红黑树 (1) 简介     上一篇我们介绍了基本动态集合操作时间复杂度均为O(h)的二叉搜索树.但遗憾的是,只有当二叉搜索树高度较低时,这些集合操作才会较快:即当树的高度较高(甚至一种极 ...

随机推荐

  1. python拆分CANLog

    通过CANOE 导出的log通常有很多个ID的数据,如何才能找到某一个ID下的特殊的信号?利用python可以简单的进行这个步骤,代码如下: 说明: 最终的效果是将log信息,分不同的ID进行拆分,并 ...

  2. angular开发单页面应用--页面资源部分

    关于angular是什么,能够干什么就不在这里解释了,自行搜索了,或者等稍晚一点再解释... angular适合开发单页面应用,这句话在介绍angular的网站和博客里都可以提到.因为angular是 ...

  3. vim的使用与配置

    vim的简单使用 Content 三种模式 光标移动 查找与替换 删除.复制和粘贴 命令行 块选择 多文件编辑 多窗口显示 中文编码问题 语系转换和 三种模式 vim可以分为一般模式.编辑模式和命令行 ...

  4. 解决pip安装超时

    我们在使用python开发的时候总会需要安装很多第三方模块 比如我用flask搭建web, 需要很多第三方模块,比如flask-sqlalchemy, flask-bootstrap等等.而这些模块用 ...

  5. Winform的"透明"

    手头目前的一个项目(.Net4.0)中有这样一个需求:在程序中要进行视频采集,并且要在视频影像区域进行绘图编辑,对绘图能进行拉伸,拖拽和删除.从需求来看,必须得在视频影像区的上方盖一层画布才能这么操作 ...

  6. 定义类型uint8_t,uint32_t

    定义的类型uint8_t,uint32_t能更明显的显示所占字节数.uint8_t表示占1个字节(1 字节=8 bit), uint32_t表示占4个字节((4 字节=32 bit). #includ ...

  7. java 简单使用redis

    1.配置文件 <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig" ...

  8. SQL Server 从数据库中查询去年的今天的数据的sql语句

    因为最近的项目的一个小功能需要实现当前数据和历史的今天做一个对比.在网上也查了很久,很多都是实现一个月内的,一年内的所有数据,昨晚突然就找到了下面的实现方法,在SQL Server2008中试了一下, ...

  9. KAOS模型

    问题描述: 我们开发了一种针对时序数据的文件格式TSFile,本身不支持sql查询.为了让公司分析人员能够用SQL进行分析,并且应用一些机器学习算法进行预测,需要设计并实现一个TSFile与Spark ...

  10. 正则-RegExp()构造函数

    上次写了js正则的字面量声明,今天说说RegExp()构造函数声明: var p=/cat/g;   //字面量声明var p=new RegExp('cat','g') //构造函数声明 它两所表达 ...