1.1. 队列结构的中间件
1.2. 消息放入后,不需立即处理
1.3. 由订阅者/消费者按顺序处理
2.1. Mysql:可靠性高,易实现,速度慢
2.2. redis:速度快,单条大消息包时效率低
2.3. 消息系统:专业性强、可靠、学习成本高(如RabbitMQ)
3.1. 死循环方式读取:易实现,故障时无法及时恢复
3.2. 定时任务:压力均分,有处理量上限
3.3. 守护进程:类似于php-fpm、php-cg、supervisor,需要shell基础
4.1. 解耦系统 - mysql
现在有订单系统和配送系统,需要使用队列消息把两个系统解耦出来
建立一个 mySql 的订单队列数据表,所有订单信息都会记录到这个订单表中,然后使用 crontab 定时把商品配送出去
4.2 商城秒杀活动 - Redis 的 list 消息队列:
4.2.1. 秒杀程序把请求写入Redis、(Uid,time_stamp) 微秒:microtime()4.2.2. 检查Redis已存放的长度,超出上限直接丢弃4.2.3. 死循环处理存入Redis的数据并入库4.3. RabbitMQ架构和原理 官网传送门
特定:完整的实现AMQP、集群简化、持久化、跨平台RabbitMQ使用
RabbitMQ 安装(rabbitmq-server、php-amqplib)生产者向消息通道发送消息消费者处理信息PS:另外我觉得 beanstalkd 服务也是不错的,它是一个高性能、轻量级的分布式内存队列系统,读者可自行了解一下。