消息队列的使用
1、应用场景:
适合大并发、高耗时、不需要立即返回结果的业务,例如秒杀、抢购
2、对比:
3、触发机制
4、订单系统和配送系统案例(解耦)
4.1、程序流程
4.2、分析:
order.php
将用户下单添加到一张队列表中,状态为0表示未处理
goods.php
Linux每分钟执行此文件,将订单状态改为2,代表处理中,防止其他执行冲突,然后mysql从中每次取2条数据出来处理,完成以后把状态更新为1,表示订单处理成功
任务脚本——goods.sh
创建每分钟执行的定时任务并保存日志
日志:
这样,订单系统出现故障的话配送系统是不会出现影响的,便实现了业务的解耦
5、redis的list类型实现秒杀案例
双向链表,可从头部追加元素,也可以从尾部主加元素
逻辑设计:
接收用户请求,将其存入redis(时间戳存微秒)
使用死循环将redis的数据存到数据库中