首页/数据/数据库速查/缓存预热(上线与重启后)
Redis 运维与场景124 条

缓存预热(上线与重启后)

冷缓存=全部回源:上线、重启、扩容后先预热热点数据,控制回源速率,避免数据库被第一波流量打穿。

数据库速查数据更新于 2026-10-13

缓存预热怎么做

冷缓存意味着第一波流量几乎全部回源,数据库很容易被打穿。上线、重启或扩容新节点加入后,应按热点清单提前写入缓存,同时控制写入速率、给键设置带抖动的过期时间,避免大量键在同一时刻集中过期造成第二轮回源。

基本信息

适用上线、重启、扩容、缓存清空后的任何场景
预热内容热点数据与核心业务链路依赖的数据
速率控制按数据库承受能力限速,分批完成
效果验证keyspace_hits 上升、回源查询量下降

预热脚本思路

预热脚本思路
# 1) 从访问日志或埋点排行导出热点键清单
# 2) 批量写入并设置带抖动的 TTL,避免同时过期
for key in $(cat hot_keys.txt); do
  value=$(loader --key "$key")               # 从数据源加载真实值
  redis-cli SET "cache:$key" "$value" EX $((600 + RANDOM % 120))   # TTL 抖动,错开过期时间
  sleep 0.01                                 # 限速,控制对数据库的压力
done
# 3) 预热完成后核对命中率
redis-cli INFO stats | grep -E 'keyspace_hits|keyspace_misses'
redis-cli DBSIZE

预热检查点

阶段动作判据
清单准备从日志或埋点生成热点键覆盖核心链路,不用人工拍脑袋
速率控制限制每秒写入数量数据库指标平稳,无慢查询突增
TTL 设置基准值加随机抖动避免同一时刻集中过期
效果验证查看命中率与回源量命中率回升、回源 QPS 下降
异常兜底保留限流与降级开关预热影响业务时可立即暂停

典型使用场景

  • 大促或活动上线前预热核心商品与配置数据
  • 实例重启后恢复热点,避免重启即高峰
  • 集群扩容新节点加入后预热,防止新节点冷启动
  • 缓存清理后的补救:按点击数重新填充热点
  • 灰度发布验证:先预热再放量,降低首波回源压力
预热清单要能持续维护:从访问日志或埋点排行自动生成,人工维护的清单很快就会与真实热点脱节。
不要预热全量数据:耗时长、占满内存,且大部分键根本不会被访问,只预热点即可。

易错点

  • 预热全量数据:耗时数小时并占满内存,真正需要的热点反而被挤出
  • 预热不设过期时间:数据后续变更后缓存长期保留旧值,读不到更新
  • TTL 不做抖动:大量键同时过期,回源流量在同一秒集中爆发
  • 不设限速:预热本身把数据库压垮,比冷缓存后果更严重

数据来源与参考

  • Redis 官方文档: 缓存预热实践

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌