缓存机制详细算法
缓存只需要计算两个值:已缓存副本的使用期(age),和已缓存副本的新鲜生存期(freshness lefetime)
使用期就是自从服务器将其发送出来(或者最后一次被服务器再验证)之后“老去”的总时间(!服务器总是记录所有文档的最新版本)。但是缓存可能不知道文档是来自上游缓存还是来自服务器的,所以它不能假设文档是最新的。它必须根据显式的Age首部(优先),或者通过对服务器生成的Date首部处理,来确定文档的使用期。
新鲜生存期表明,已缓存副本在经过多长时间之后,就会因新鲜度不足而无法再向客户端提供了。新鲜生存期考虑了文档的过期日期,以及客户端可能请求的任何新鲜度覆盖范围。
//伪代码:
//1表面使用期是基于Data首部的
//表面使用期 = max(0,服务器响应时间-Data首部时间)
//表面使用期 = 当前时间-发送文档的时间,因计算机时钟设置的差异,
//得到结果可能有差异,出现负值,所以需要取零来判断
apparent_age = max(O, time_got_response - Date_header_va1ue);
//2逐跳使用期计算
//实际表面使用期 = max(表面使用期,Age首部时间)
corrected_apparent_age = max(apparent_age, Age_header_va1ue);
//3延迟补偿
//估计响应的延迟 = 服务器响应时间 - 确认应答时间
response_de1ay_estimate = (time_got_response - time_issued_request);
//文档在缓存中停留的时间 = 实际表面使用期+估计响应时间
age_when_document_arrived_at_our_cache =
corrected_apparent_age + response_de1ay_estimate;
//拷贝完成到缓存时长 = 当前时间-响应时间
how_long_copy_has_been_in_our_cache = current_time - time_got_response;
//总使用期 = 文档在缓存中停留的时间+拷贝完成到缓存时长
age = age_when_document_arrived_at_our_cache +
how_1ong_copy_has_been_in_our_cache;