概述
当略微陈旧的值可接受时,stale-while-revalidate 是读密集路径的正确默认。其价值完全取决于硬性陈旧上限与单飞刷新,否则延迟优势会变成正确性损失。
关键步骤
- 命中缓存时立即返回,并标记后台刷新。
- 异步刷新并写入带新时间戳的值。
- 超过最大陈旧时间后阻塞并回源。
- 对刷新做单飞,使并发读共享一次回源。
验证
- 命中缓存时立即返回。
- 后台刷新更新条目。
- 超过上限的条目触发阻塞加载。
- 并发读共享一次回源请求。
注意事项
- 该策略以一致性换延迟,对必须精确读取的数据不适用。
- 依赖后台机制,否则会退化为普通缓存。
适用范围
本条目围绕「实现 stale-while-revalidate 缓存」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。
建议在正式环境落地前先在预发或隔离环境演练一遍,把关键观测指标与负责人一并记录,确保出现异常时能快速定位并恢复。
async function get(k) {
const hit = await cache.get(k);
if (hit && Date.now() - hit.at < HARD_CAP) { void refresh(k); return hit.value; }
return load(k);
}