这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
队列串行:使用消息队列串行处理请求
问题:Redis扣减后,数据库怎么办?🤔
上一节我们学会了用Redis原子操作扣减库存:
新的问题出现了:
场景:用户购买成功
1. Redis扣减库存:stock = 100 → 99 ✅
2. 创建订单:需要写入MySQL ❌
3. 扣减MySQL库存:stock = 100 → 99 ❌
问题:
- 如果直接操作MySQL,又会回到数据库瓶颈
- 如果不操作MySQL,Redis和MySQL数据不一致
- 如何在保证性能的同时,完成数据库操作?解决思路:使用消息队列!
什么是消息队列?📨
实现方案:Redis List作为消息队列 🔧
方案架构
方案落地
队列的作用:削峰填谷 📊
队列消费策略 📋
多消费者实现
性能对比:有无队列 ⚡
想一想
问题 1:队列满了怎么办?
提示:
- 队列容量有限
- 用户持续下单
- 如何处理队列溢出?
问题 2:消费者挂了怎么办?
提示:
- 消费者处理订单时崩溃
- 队列中的消息还在吗?
- 如何保证消息不丢失?
问题 3:如何保证Redis和MySQL的一致性?
提示:
- Redis扣减成功
- 队列写入成功
- MySQL操作失败怎么办?