mysql消息队列的原理_PHP和MySQL实现消息队列
最近遇到一个批量发送短信的需求,短信接口是第三方提供的。刚开始想到,获取到手机号之后,循环调用接口发送不就可以了吗?
但很快发现问题:当短信数量很大时,不仅耗时,而且成功率很低。
于是想到,用PHP和MySQL实现一个消息队列,一条一条的发送短信。下面介绍具体的实现方法:
首先,建立一个数据表sms,包含以下字段:
id,
phone, //手机号
content //短信内容
将需要发送的短信和手机号存入sms表中。
接下来,需要用PHP实现一个定时器,定时读取一条记录,并发送短信:
$db = new Db();
$sms = new Sms();
while(true){
$item = $db->getFirstRecord(); //获取数据表第一条记录
if(!$item){
//如果队列中没有数据,则结束定时器
break;
}
$res = $sms->send($item['phone'],$item['content']); //发送短信
if($res){
$db->deleteFristRecord(); //删除发送成功的记录
echo $item['phone'].'发送成功';
}else{
echo $item['phone'].'发送失败,稍后继续尝试';
}
sleep(10); //每隔十秒循环一次
}
echo '发送完毕!';
?>
将代码保存为timer_sms.php,打开命令行,执行定时器:
php timer_sms.php
好了,php定时器将会根据设定的时间间隔(这里设的是10秒),自动完成发送短信的任务。任务完成后将自动退出定时器,不再占用服务器资源。
根据我的测试,PHP定时器占用资源并不多,不会对服务器造成压力。而且是异步访问数据库,也不会影响数据库的运行。
这种方式的优点是:
1、后台运行,前台无需等待
2、成功率高,失败的记录会自动重发,直到成功
mysql消息队列的原理_PHP和MySQL实现消息队列相关推荐
- php mysql千万级数据修改_PHP 结合 MySQL 千万级数据处理
mysql分表思路 一张一亿的订单表,可以分成五张表,这样每张表就只有两千万数据,分担了原来一张表的压力,分表需要根据某个条件进行分,这里可以根据地区来分表,需要一个中间件来控制到底是去哪张表去找到自 ...
- apache php mysql是长连接吗_php关于mysql长连接问题
1.当 函数 mysql_connect 的前三个参数(server username password)相同,并且第四个参数(new_link)不传递时候,重复调用mysql_connect 是会返 ...
- mysql 9.0创建数据库_PHP与MySQL学习笔记9:创建Web数据库
1.在服务器上部署MySQL服务基本步骤合注意点 1)安装MySQL(命令安装.安装包安装等) 2)考虑是否需要一个独立的操作系统用户权限来运行MySQL程序. 3)路径的设置 4)root密码 (附 ...
- php mysql两个表合并_php操作mysql两个数据库中表的数据同步
题记: 我们开发当中经常会遇到,数据同步.比如将teaching数据库中area表的数据同步到study数据库中zone表中. 备注:这两个数据库不同,数据表名字也不同,但数据表的结构相同.不同表结构 ...
- PHP连接MySQL数据常用的函数_PHP操作Mysql常用函数
一.操作步骤: 连接MySQL数据库 $link = mysql_connect($db_config['host'], $db_config['user'], $db_config['pwd']) ...
- mysql mof提权原理_关于mysql mof提权研究
无意中看到有关mysql的这种提权方式,趁着有空余时间便研究了起来,发现网上有挺多地方写的不够详细的,研究的时候也卡壳了一段时间. 利用前提:操作系统为windows 操作系统版本不宜太高,2008测 ...
- mysql killed进程不结束_php和mysql连接方式(短 长 池)
一个php work进程只能处理一个请求,当完成一个请求了,才能处理下一次的请求 2.短连接: 执行到php关闭mysql连接的代码时,就断开,否则在处理本次请求结束的时候,释放mysql连接 实验: ...
- mysql的覆盖索引原理_「Mysql索引原理(七)」覆盖索引
通常大家都会根据查询的WHERE条件来创建合适的索引,不过这只是索引优化的一个方面.设计优秀的索引应该考虑到整个查询,而不单单是WHERE条件部分.索引确实是一种查找数据的高效方式,但是MySQL也可 ...
- php如何在mysql数据库里创建表_php创建mysql数据库以及数据表
php创建mysql数据库以及数据表 用php链接到mysqli,成功后利用,mysqli_query()创建数据库以及数据表. $con = mysqli_connect("localho ...
最新文章
- This tutorial code needs the xfeatures2d contrib module to be run.
- ITK:形态分水岭MorphologicalWatershed分割
- luogu2839 [国家集训队]middle
- npm执行命令后无任何响应(windows下)
- [即将举行的网络研讨会]对Kubernetes进行故障排除:您需要具备的7个关键组件
- beeshell —— 开源的 React Native 组件库
- RTFM? 如何写一本值得一读的手册
- oracle undo head,淺談Oracle的undo管理
- datetime.strptime格式转换报错ValueError
- Stack with max and min 查找栈中最大最小数
- 搭建php环境,更换织梦服务器
- 【matlab数字图像处理】数字图像处理中的坐标系
- MFC对磁盘测速工具CrystalDiskMark6_0_0的工厂方式控制源代码 同时控制 8个窗口,界面同步显示,比较完整点的版本
- 简明python指南(预览版)
- CN_计算机网络体系结构概念@IP数据报(分组)结构@各层报文(PDU)之间的关系@PDU协议数据单元
- Android自定义View之仿QQ运动步数进度效果
- 惠普台式计算机配置,hp惠普台式机bios设置图文教程
- 公众号点击图片变成另一张_公众号互动内容:小众潮流or下一个风口?
- Springboot 瘦身打包
- 字符的编码表示——ASCII码、国标码、Unicode码
热门文章
- IPM: Generate IP Product via template
- 关于错误Resource interpreted as Script but transferred with MIME type text_html
- SAP ABAP实用技巧介绍系列之如何生成值为NULL的table row
- Java SpringAOP学习之How is beforeMethodAdvice called
- SAP UI5在本地运行和部署到服务器后运行的差异
- 使用ABAP批量下载Markdown源文件里的图片到本地
- centos中bash占用cpu,linux下如何定位CPU占用高的进程的问题点
- mysql级联_MySQL 级联复制(A-B-C)
- python小学生口算题生成器_小学数学题出题神器
- jenkins搭建_自动化测试系列之jenkins配置搭建环境