网站请求流程:Redis 缓存优先,未命中回源 PostgreSQL 并回填

网站请求流程:Redis 缓存优先,未命中回源 PostgreSQL 并回填 由 Archify 生成的时序图。 GET /api/resource GET cache:{key} 缓存优先:先问 Redis,不直接查库 nil(未命中) SELECT ... WHERE id = ? 仅在未命中时才回源 结果行 SET cache:{key} EX 300 把回源结果序列化为缓存值回填,带 TTL 兜底一致性 OK 200 JSON 请求与缓存优先 未命中,回源查询 回填缓存并响应 浏览器 · 前端页面 · 时序参与者 浏览器 前端页面 API 服务 · 请求处理层 · 时序参与者 API 服务 请求处理层 Redis · 缓存层 · 时序参与者 Redis 缓存层 PostgreSQL · 权威数据源 · 时序参与者 PostgreSQL 权威数据源 图例 请求 返回 异步追踪 默认消息

快路径(缓存命中)

  • • 浏览器 → API → Redis 命中 → 直接返回,全程不碰数据库
  • • 响应时间从毫秒级数据库查询降到亚毫秒级内存读取
  • • 绝大多数请求走这条路径,数据库只承担首次与过期后的回源

慢路径(本图所示)

  • • Redis 返回 nil 才查询 PostgreSQL——回源是例外不是常态
  • • 查到的权威数据先回填缓存再返回,让下一次请求走快路径
  • • 回填必须带 TTL:即使后续删缓存失败,脏数据也只在 TTL 内存在

必须防的三个问题

  • • 穿透:查不存在的 key 反复打库 → 缓存空值(短 TTL)或布隆过滤器
  • • 击穿:热 key 过期瞬间大量回源 → 互斥重建,只放一个请求查库
  • • 雪崩:大批 key 同时过期 → TTL 加随机抖动,避免同时回源