Product Detail

Use when designing 商品详情页, SKU specs, 静态化, CDN, 商详缓存与库存分离. For penetration/breakdown/avalanche read backend-cache-trap. For flash-sale pages read backend-seckill.

1398281322-a11y Updated

File contents

商品详情页

When to Invoke

商详、SKU 规格、详情高 QPS、静态化、详情缓存脏了。电商面试:「详情页怎么抗高并发」。

When NOT

缓存三件套细节 → cache-trap。秒杀活动页 → seckill。购物车 → cart。OSS 直传/STS/私有桶 → file-oss

风险(面试考点)

详情 QPS 高但变更少:必须 页面静态/CDN + 多级缓存。把库存、价格强绑在同一超长 TTL 缓存里,会卖过期价或显示有货实际无货。

SKU:规格(颜色/尺码)组合爆炸,不要为每个组合生成一张详情 HTML。SPU 静态,SKU 价与库存动态接口。

方案选型(轻量优先)

数据 默认
标题、图文、规格定义 CDN / 静态化,TTL 长,发布时刷新
价格、活动标签 Redis 短 TTL 或主动删
可售库存 不进长缓存;短 TTL 或单独接口,允许最终一致
SKU 列表 spu_id 一次取出,前端选规格

读路径:CDN → 本地 Caffeine → Redis → DB。写:改 DB 后删对应 key(cache-trap)。

默认方案

GET /spu/{id}          可缓存
GET /spu/{id}/live     价格+可售,Cache-Control 短或协商缓存
key: spu:{id}:info
key: spu:{id}:live

SKU 表:uk(spu_id, spec_md5),库存在 sku 行或库存中心,不要复制进详情 JSON 长期存。

运营改图:发版本号或删 CDN。不要指望等 TTL。

反例

错误:详情 JSON 里带 stock=1234,缓存 1 小时。 正确:库存单独短缓存或实时。

错误:每个 SKU 一张静态页 × 上万规格。 正确:SPU 一页 + SKU 接口。

错误:秒杀也走普通商详集群。 正确:秒杀页静态独立,见 seckill

验证

  • 压测商详,DB QPS 远低于入口。
  • 改价后详情 live 接口很快变;图文允许稍延迟。
  • 无货 SKU 在 live 接口体现,静态页仍可打开。

评审清单

  • 图文与价格库存分离缓存
  • 写后删缓存或版本号
  • 未把秒杀流量接在普通商详上

1398281322-a11y/java-backend-guardrails/tree/main/skills/java-backend-guardrails/product-detail commit 73ecf96509

Frequently asked questions

npx skillmds@latest add 1398281322-a11y/product-detail