# Product Detail

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

- Skill: `1398281322-a11y/product-detail` (Agent Skill)
- Install (CLI): `npx skillmds@latest add 1398281322-a11y/product-detail`
- Raw SKILL.md: https://api.skillmd.com/api/skills/1398281322-a11y/product-detail/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: 1398281322-a11y (https://skillmd.com/u/1398281322-a11y)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/1398281322-a11y/product-detail

---


# 商品详情页

## 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`）。

## 默认方案

```text
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 接口体现，静态页仍可打开。

## 评审清单

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

