热点缓存
2025年01月05日
一、认识
缓存击穿 是指某些热点 key
(如秒杀商品详情)在过期瞬间,有大量请求同时访问,导致这些请求直接打到数据库。
二、定位
三、解决方案
3.1 互斥锁
当缓存失效时,使用分布式锁(如 SETNX
或 Redisson
)确保只有一个请求去查询数据库并更新缓存, 当其余请求等待或短暂返回旧数据
if not redis.exists(key):
if redis.setnx(lock_key, "lock"):
# 查询数据库并更新缓存
redis.set(key, db_value, expire_time)
redis.delete(lock_key)
3.2 永不过期
对热点数据定期主动更新,而不是设置过期时间。
3.3 缓存预热
在高峰期到来前,主动将热点数据加载到缓存中,确保数据命中率。
3.4 后台刷新
使用后台任务定时刷新热点数据,而不是等缓存失效后再去查询数据库,降低瞬时压力。