热搜与读风暴

返回 高并发

微博热搜、新闻突发、明星官宣:典型 读风暴——少数热点内容被亿级访问,写端相对可控。核心是 多级缓存 + 热点隔离 + 降级静态,而非库存扣减。


场景特征

特征说明
读 QPS 极高单条内容 ID 成热点
写相对较少发帖、转评有峰但常低于读
时间线多样热搜榜、详情页、评论列表
允许短暂旧阅读量、评论数可近似

解决方案总览

CDN 缓存静态壳 + 边缘缓存 API(可协商)
      ▼
网关限流(防爬虫打穿)
      ▼
L1 本地缓存(热点详情 1~3s)
      ▼
Redis 集群(详情、热搜榜、计数)
      ▼
DB 从库 / 只读副本
      ▼
失效:MQ 广播刷新 L1 + 删 Redis

1. 热搜榜

手段说明
ZSet / 有序列表hot:search:20240627 score=热度
本地缓存 Top50全站相同,每实例 1s 刷新
聚合异步点击、搜索词写入 MQ,消费者合并更新榜(见 时间窗口设计

读多写少:写路径进 MQ 合并,读路径只读 Redis。


2. 热点内容详情(热 key)

post_id=999 被访问百万次/分钟:

层级策略
CDN未登录可读部分静态化
应用 L1Caffeine<postId, Dto> max=1000,TTL 2s
Redispost:999 单 key,加随机后缀读扩散 post:999:{0..7} 写时 fan-out
副本读从库,主库只写

热点探测:采样 access log 或 Redis hotkeys,自动提升 L1 TTL。


3. 写路径(发帖)与读分离

发帖 → 写主库 → 发 MQ
  → 消费者更新搜索索引(ES)、刷新缓存、粉丝时间线

推拉结合

模式适用
拉(Timeline)大 V 发帖,粉丝拉取
推(Fan-out)普通用户,粉丝少可推;大 V 只写收件箱索引

大 V 发帖忌同步推百万粉丝信箱——改 拉模型 + 缓存


4. 计数类(阅读、点赞)

点赞与播放计数INCR + 异步落库,展示可滞后。


5. 降级

级别行为
L1关评论实时、只缓存详情
L2返回简化 JSON、无推荐
L3静态「热点专题页」

检查清单

  • 热点 post 是否打穿单 Redis?
  • 是否误用主库扛读?
  • 大 V 发帖是否同步 fan-out?
  • 缓存失效是否广播到所有实例?

相关