716 字
约 2 分钟
15
S27-J02 · 缓存预热与分布式锁

适用读者:上线后"冷缓存打爆数据库"的人。
前置:S12-J01(击穿)、S12-J03(分布式锁)。
覆盖旧文:529(263) = 263 点。
扩展点:E-S27-012(预热的三种模式)。
上一篇:S27-J01 · 分布式可靠性四件套:业务 Key、Single-flight、僵尸 Owner、Stage
下一篇:S27-J03 · 验证码与风控。


1. 一句话结论

预热解决"冷启动瞬间打爆 DB",锁解决"多个实例重复预热"。两者绑定,是因为预热本身就是一次"只该由一个人做的事"。

模式 做法 风险
启动预热 应用启动时拉热点 多实例重复拉
定时预热 低峰期定时刷 与业务高峰错开
懒加载 + 锁 首次访问时加载 首个用户慢

2. 预热的三种模式(E-S27-012)

模式 适合 注意
全量预热 热点数据小 启动慢
Top-N 预热 热点集中 需要热度数据
分片预热 数据大 分片并行 + 限速

判据:"冷启动时 DB 能承受全量查询吗?" 不能 → 必须预热 + 限速。


3. 锁在预热中的三个作用

作用 说明
防重复 多实例只让一个拉
防击穿 与 S12-J01 的互斥重建同构
限速 锁粒度控制并发

"为什么不用"每个实例各拉一次"":N 个实例 × 全量数据 = N 倍压力——正好是预热想避免的。


4. 预热的失败处理

情况 处理
预热超时 部分预热 + 懒加载兜底
锁持有者崩溃 租约过期(J01 的 fencing)
数据变更 预热后仍要处理失效(S12-J02)

5. 五个误区

误区 真相
"每个实例都预热更保险" 会放大 DB 压力
"预热完就不用管失效" 仍需一致性方案
"预热越全越好" 启动慢、内存高
"锁只是为了互斥" 还用于限速
"预热失败就重启" 应先降级

6. 自检

  1. 三种预热模式?
  2. 为什么锁和预热绑定?
  3. "每实例各拉一次"的问题?
  4. 预热失败怎么兜底?
  5. 预热后还要处理什么?

7. 下一篇

S27-J03 · 验证码与风控:滑块设计与实现

预热讲完,下一篇讲滑块验证码的真正难点。


本篇属于系列《S27 · 杂项归档与工具实测》。旧文来源:A-529;扩展点 E-S27-012。

S27-J02 · 缓存预热与分布式锁
https://www.clxhxhhr.top/posts/5620/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。