首页/数据/数据库速查/缓存击穿(热点键瞬间失效)
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条Redis 命令96 条
Redis 运维与场景124 条

缓存击穿(热点键瞬间失效)

某个热点键过期瞬间,大量并发同时查库重建:用互斥锁让一个请求重建、其余等待,或逻辑过期让旧值先顶上。

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

互斥重建示例

互斥重建示例
def get_hot(key):
    v = redis.get(key)
    if v is not None:
        return v
    # 抢锁重建:只放一个请求去查库
    if redis.set(key + ':lock', '1', nx=True, px=3000):
        try:
            row = db.query_hot(key)
            redis.set(key, row, ex=300)
            return row
        finally:
            redis.delete(key + ':lock')
    # 没抢到锁:短暂重试或返回降级值
    return redis.get(key) or fallback(key)
互斥锁SET NX PX 抢锁 + 双检 + 释放
逻辑过期value 内嵌过期时间,过期后异步刷新
永不过期运营后台上线时主动刷新(热点白名单)
互斥重建要加「自旋上限与超时」:锁持有者超时未完成时其它请求要有兜底路径,避免整体卡死。

易错点

  • 锁没有超时:重建方崩溃后所有请求永久等待
  • 锁内代码耗时过长(大查询):等锁请求全部超时

数据来源与参考

  • Redis 官方文档: 使用模式
  • 缓存击穿治理实践

相关工具

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