主要内容
1.消息队列的概念,原理和场景
2.解耦案例:队列处理订单系统和配送系统
3.流量削峰案例:Redis的List类型实现秒杀
RabbitMQ:更专业的消息系统实现方案
1.消息队列的概念、原理、实现方式
1.1消息队列概念
队列结构的中间件
消息放入后,不需要立即处理
由订阅者/消费者按顺序处理
image.png
1.3 应用场景
冗余
解耦
流量削峰
异步通信
拓展性
排序保证
常见队列实现优缺点
队列介质
1.Mysql:可靠性,易实现,速度慢
2.Redis: 速度快,单条大消息包时效率低
3.消息系统:专业性强,可靠,学习成本高
消息处理触发机制
1.死循环方式读取:易实现,故障时无法及时恢复
2.定时任务:压力均分,有处理量上限
3.守护进程:类似于PHP-FPM和PHP-CG,需要shell基础
2.解耦案例:队列处理订单系统和配送系统
image.png image.png思路:使用队列将订单系统与配送系统解耦
1.订单系统同以往记录到mysql
2.配送处理系统每次查询数个未完成订单标记为代执行订单,执行配送业务后标记为以完成
3.使用定时任务定时执行配送处理系统
3.流量削峰案例:Redis的list类型实现秒杀
3.1redis数据类型中的list类型
双向链表
LPUSH/LPUSHX:将值插入到(/存在的)列表头部
LPUSHX:将值插入到存在的列表头部,若不存在操作无效
RPUSH/RPUSHX:将值插入到(/存在的)列表尾部
LPOP:移出并获取列表的第一个元素
RPOP:移出并获取列表的最后一个元素
LTRIM:保留指定区间内的元素
LLEN:获取列表长度
LSET:通过索引设置列表元素的值
LINDEX:通过索引获取列表中的元素
LRANGE:获取列表指定范围的元素
image.png image.png
思路:
1.存到redis的list中形成队列
2.从redis队列中取出保存数据库
网友评论