外观
一句话答案
推荐延迟 MQ(RocketMQ 延迟消息)作主力 + DB 定时扫描兜底,权衡精度、可靠性和复杂度。
核心要点
| 方案 | 精度 | 可靠性 | 复杂度 |
|---|---|---|---|
| RocketMQ延迟消息 | 固定级别 | 高 | 低(推荐) |
| Redis ZSET+轮询 | 秒级 | 中 | 中 |
| 时间轮 | 高 | 低(内存) | 中 |
| 定时扫描DB | 分钟级 | 高 | 低 |
推荐: 延迟MQ作主力 + 定时扫描兜底
追问与易错
追问方向:
- 延迟 MQ 不够精确怎么办?
- 兜底扫描频率怎么设?
- 取消订单需要做哪些操作?
易错点:
- ❌ 用一种方案就够——推荐主力+兜底双保险
- ❌ 定时扫描不能用——作为兜底完全可以
💡 记忆锚点
订单超时取消的"主力+兜底"双保险:主力用延迟MQ(下单时发一条30分钟延迟消息,到时消费者检查订单状态,未支付就取消),兜底用DB定时扫描(每分钟扫一次超时未付订单,捞漏网之鱼)。取消时要释放库存、释放优惠券、通知用户,别只改状态。