标准答案

  1. 互斥重建让一个请求负责回源和写缓存,其余请求短暂等待或返回兜底结果,适合不能返回旧值且重建成本可控的数据。
  2. 逻辑过期在缓存值中保存业务过期时间,过期后仍先返回旧值,同时由一个后台任务异步刷新,适合商品详情、配置等可容忍短暂旧读的数据。
  3. 后台预热在活动开始、发布完成或热点趋势可预测时提前加载数据,适合峰值明确的场景,但要避免预热任务本身压垮数据库。
  4. 无论哪种策略,都要限制单 Key 回源并发、设置重建超时和失败退避,并监控热点 Key 的命中、刷新耗时和回源错误。

题目解析

关键问题不是“要不要上锁”,而是该数据是否能读旧值。涉及库存可售量、风控判定等场景,旧值可能直接产生错误;展示型数据则通常更适合逻辑过期降低尾延迟。

热点往往会迁移。只给当前已知 Key 做永久预热会遗漏突发热点,因此还需要热 Key 识别、容量保护和自动降级。

常见误区

  • 让所有等待重建的请求一直阻塞,重建慢时把线程或协程池耗尽。
  • 对不能读旧的业务使用逻辑过期,却没有在写路径做额外校验。

作者信息