php mysql 消息功能_PHP使用MySQL实现消息队列

消息队列常用在流量削峰(秒杀场景),异步通信等地方。

大体的结构如下:

20180107100717281918.png

类似于消费者和生产者的关系,首先生产者在消息队列未满的时候,才将生产的产品放进消息队列中;消费者在消息队列不为空的时候,才从消息队列中取出产品进行消费。出队的那个步骤常用的方法是一直轮询和定时操作。

这里举一个外卖送餐的案例:

有个生意很好的饭店,好到什么程度呢?一分钟有500人下单,这样的话,店家掌柜肯定处理不过来,于是,就先暂时不通知用户是够接单,先把所有的订单先存着,只告诉他们正在处理中,但是呢,还有一个问题,就是有一些是其他饭店专门来搞事的(眼红了),所以就要查看订单是否合法。

上面的情景可以这样实现:用户下单之后,后台会创建一个随机的order_id对应该订单;并且该订单的初始状态(status)为待处理(0);当商家查看该订单情况时,将status改为1,表示正在处理;当商家确认这个订单可以接受时,就将该订单的status改为2,表示成功接单。

首先在数据库中创建一个order_list订单表,表结构如下:

mysql> desc order_list;

+----------+------------+------+-----+----------+-------+

| Field | Type | Null | Key | Default | Extra |

+----------+------------+------+-----+----------+-------+

| order_id | int(11) | NO | PRI | NULL | |

| mobile | int(8) | NO | | 88888888 | |

| status | tinyint(1) | YES | | 0 | |

+----------+------------+------+-----+----------+-------+

3 rows in set (0.05 sec)

有两个PHP程序,分别是producer.php(用户、生产者);     consumer.php(商家、消费者)

一旦有用户下单,就往order_list中添加一条数据,这里方便测试,于是执行下面的PHP程序,表示用户方(producer.php),每隔2秒下一次单;

$pdo=new PDO("mysql:host=localhost;dbname=test","root","root");

$stmt=$pdo->prepare("insert into order_list (order_id,mobile,status) values (?,?,?)");

while(1){

$order_id=rand(10000,99999);

$mobile=rand(11111111,99999999);

$stmt->execute(array($order_id,$mobile,0));

echo date("Y-m-d H:i:s",time())."添加了一条订单,订单号为{$order_id},手机号为{$mobile}\n";

sleep(2);

}

?>

用户提交订单后,剩下的事情就交给商家了,商家(consumer.php)生意太忙了,每4秒才能处理一个订单:

$pdo=new PDO("mysql:host=localhost;dbname=test","root","root");

$stmt=$pdo->prepare("update order_list set status=? where status=? limit 1");

$stmt_select=$pdo->prepare("select order_id from order_list where status=1");//正在处理的订单号

while(1){

$init=0;//初始status

$lock=1;//标记为正在处理

$success=2;//成功接单

//为了保证数据的一致性,处理订单之前,要先锁定一个订单,将其status由0改为1,然后才可处理

//处理完毕后,然后再将status从1改为2

$stmt->execute(array($lock,$init));//锁定要处理的订单

$stmt_select->execute();

$result=$stmt_select->fetch(PDO::FETCH_ASSOC);//查询正在处理的订单号

$order_id=$result[‘order_id‘];

echo date("Y-m-d H:i:s")."准备处理订单,订单号为{$order_id}\n";

sleep(3);//处理3秒

$stmt->execute(array($success,$lock));

echo date("Y-m-d H:i:s")."订单处理完成,订单号为{$order_id}\n";

sleep(1);//休息1秒

}

?>

这样就使用MySQL实现了一个简单的消息队列,可以看一下如何使用Redis实现消息队列,与这个方法类似。

PHP使用MySQL实现消息队列

标签:通信   --   sel   表示   time()   通知   情况   new   使用

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:https://www.cnblogs.com/-beyond/p/8214355.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
phpmysql开发的报刊订阅管理系统 毕业设计整套列表:(80)ASP+ACCESS企业公司网站 ASP.NET+SQL2000销售管理系统 ASP+ACCESS网上考试系统 ASP.NET+ACCESS校友录毕业设计 ASP+ACCESS在线考试系统 ASP.NET+SQL2000校友录 ASP+ACCESS校友录 ASP.NET+SQL2000房地产管理系统 ASP+ACCESS企业网络管理系统 ASP.NET+SQL2000在线考试系统 ASP+ACCESS办公系统 ASP.NET+SQL2000信息安全学习网的设计与开发 ASP+ACCESS我的雅虎设计 ASP.NET+SQL2000点播 ASP+access留言板 ASP.NET+SQL2000网上购物商城 ASP+ACCESS BBS论坛的设计与实现 ASP.NET+SQL2000房地产管理系统 ASP+ACCESS个人网站 ASP.NET+SQL2000在线考试系统(数值分析) ASP+ACCESS图书管理系统 ASP.NET+SQL2000考试系统 ASP+ACCESS网上书店 ASP.NET+SQL2000商城 ASP+ACCESS网络招聘系统 VS2005(VB)家庭理财系统 ASP+ACCESS班级网站设计 ASP.NET+SQL在线视频点播系统 ASP+ACCESS企业网络管理系统 ASP.NET+SQL BBS管理系统 ASP+Access人事(人力资源)管理系统 ASP.NET+SQL2000学生成绩管理系统 asp+access网上购物系统 ASP+SQL客户关系管理系统 ASP+SQL旅游信息管理系统 ASP+SQL汽车销售网站 c#+access ktv点歌系统 网上书店acc全套 C#电子邮件客户端软件 星星在线考试系统 C#+SQL2005教材管理系统 ASP+SQL企业网络管理系统 ASP+ACCESS考试报名信息处理系统 VB.NET酒店管理信息系统 (asp+access)完整购物系统 (ASP+ACCESS)学生管理系统. ASP+ACCESS网上订水系统 ASP+ACCESS自学考试网站 ASP+ACCESS信息查询系统 ASP+ACCESS电子商务网站 ASP+ACCESS新闻发布系统 ASP+ACCESS投票系统 Delphi+access题库系统与试卷生成 jsp+access教学反馈系统 Delphi+sql酒店客房餐饮管理系统开发 JSP+Access论坛 Delphi考勤管理系统 JSP+Access网上拍卖平台系统 Delphi+access学籍管理程序 JSP+SQLServer网络教学管理系统 Delphi+sql试卷生成系统 JSP+SQLServer火车站订票系统 Delphi+access电子试卷生成系统 JSP+ACCESS网络教学系统 Delphi+access《数据库原理与应用》题库系统 JSP+SQLServer网上考试系统的设计与实现 Delphi+ACCESS三层图书管理 JSP+SQLServer网上书店系统 Delphi+access商品销售管理系统 JSP+SQLServer超市管理系统 Delphi+sql试卷生成系统 JSP+SQLServer销售管理系统 Delphi酒店客房餐饮管理系统 JSP+Access网上拍卖平台系统 Delphi+SQL ERP人力管理系统 JSP+SQLServer管理系统设计 Delphi+ACCESS高校科研管理系统 JSP+ACCESS进销管理系统. Delphi+ACCESS易能光盘管理系统 JSP+SQLServer企业产品销售管理系统 Delphi信息管理系统 JSP+SQLServer人事管理全套 Delphi家庭财账管理软件 JSP+SQL网络购物 Delphi加密设计+论文 JSP+SQL自动排课系统 delphi+access超市销售系统 JSP+SQL高校智能排课系统 JSP+Access网上拍卖平台系统2 JSP+SQL利云网上书店的设计与实现 JSP+SQL基于struts网上书店 JSP+ACCESS网上书店系统 PB+SQL医院门诊信息系统 JSP+SQL基于J2EE的网上书店系统 VB+SQL仓库管理 VC+ACCESS 16PF测评系统分析与设计 VB026图书管理系统 VC++ sql班级事务管理系统 VB+ACCESS高校科研管理系统 VC++ sql商品销售管理系统 VB+ACCESS计算机自动出卷系统 VC++ USB通信程序开发 VB+ACCESS酒店收费管理系统 VC+ACCESS 酒店餐饮管理系统 VB+ACCESS企业工资管理系统 VC++ 拳皇连连看 VB+ACCESS企业人事管理系统 VC++SQL工资管理系统 VB+ACCESS试卷生成系统 VC+SQL仓库管理 VB+ACCESS水费管理(宁夏职工科技学院) VC++网络故障排错向导机制的设计 VB+ACCESS题库管理系统+论文.rar VC++网络游戏-四国军棋 VB+access题库与计算机自动出卷系统 VC+ACCESS学生宿舍 VB+Access图书管理系统 VC+SQL 商品销售管理系统 VB+ACCESS學籍管理系統 VC+SQL工资管理系统 VB+ACCESS学生信息管理系统 vc+sql文档管理系统 VB+SQL医院病历管理系统 vc+SQL进销存管理系统 VB+ACCESS原创图书管理系统 vc视频会议管理系统 VB+SQL学生信息管理系统 vc图像处理 VB+sql房屋的中介管理 VC调度机制对网络QoS影响的研究分析 VB+SQL企业人力资源管理系统 VC+SQL学生成绩管理系统 VB+SQL铁岭香河商贸有限公司销售管理系统 VC人脸识别系统设计 VB+SQL物流管理系统2 VB+SQL物流管理系统 VB+SQL医院管理系统 单片机--模拟电动车油门设计.doc VB+SQL智能排课系统 单片机-基于网络的虚拟仪器测试系统 VB校园网管理 单片机-基于GSM模块的车载防盗系统设计 TC35i 资料 宾馆管理信息系统论文.doc 单片机-基于GSM短信模块的家庭防盗报警系统 VB+ACCESS基于CAN总线的灌溉控制系统设计 单片机-火灾自动报警系统设计 VB+ACCESS家庭理财投资管理系统 单片机-电子时钟 VB+ACCESS家庭理财系统 单片机-电子设计大赛点阵电子显示屏(A题) VB+SQL第三方采购系统 单片机-电信运营商收入保障系统设计与实现 VB+ACCESS通用数据采集系统 单片机-全遥控数字音量控制的D类功率放大器 单片机- 数控直流稳压电源完整论文 单片机-数字密码锁设计 单片机-数字抢答器(数字电路) 单片机-数字时钟 单片机-水箱单片机控制系统 vfp现代物流企业管理系统 单片机-自动加料机控制系统 VFP航班售票管理系统 基于51单片机下位机采集6路温度开发 VFP工资管理系统 单片机-门控自动照明电路 单片机-智能型充电器电源和显示的设计 MATLAB智能控制 用单片机实现温度远程显示 MATLAB车牌识别 单片机-用单片机控制直流电机 单片机-温度监控系统的设计 单片机-同步电机模型的MATLAB仿真 基于JAVA的聊天系统的设计与实现 单片机-智能家用电热水器控制器.rar JAVA EMAIL客户端.zip 单片机--音乐同步彩灯的设计.doc j2me打飞机游戏 单片机--数字锁相环频率合成器的设计.doc JAVA+SQL酒店管理系统 单片机--无线多路数据采集系统设计论文.doc JAVA宿舍管理系统.rar 金相试样切割机方案设计.doc Java网上五子棋游戏设计.rar JAVA五子棋.rar JAVA中国象棋对弈软件的设计.rar JBuilder网络版五子棋.rar Java物业管理系统.rar Flash MTV回到过去
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值