跳到主要内容

热点缓存

2025年01月05日
柏拉文
越努力,越幸运

一、认识


缓存击穿 是指某些热点 key(如秒杀商品详情)在过期瞬间,有大量请求同时访问,导致这些请求直接打到数据库。

二、原因


  • 热点缓存的过期时间设置不当。

  • 并发访问集中在某些热点数据。

三、解决方案


3.1 设置热点缓存永不过期

对热点数据定期主动更新,而不是设置过期时间。

3.2 使用互斥锁

当缓存失效时,使用分布式锁(如 SETNXRedisson)确保只有一个线程查询数据库并更新缓存。

if not redis.exists(key):
if redis.setnx(lock_key, "lock"):
# 查询数据库并更新缓存
redis.set(key, db_value, expire_time)
redis.delete(lock_key)

3.3 热点预热

在系统启动或高并发场景前提前加载热点数据到缓存中。

3.4 请求分流

针对热点数据,使用 CDN 或本地缓存(如 Nginx 缓存)减少对 Redis 的访问。