队列串行:使用消息队列串行处理请求

问题: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操作失败怎么办?