最近遇到一个批量发送短信的需求,短信接口是第三方提供的。刚开始想到,获取到手机号之后,循环调用接口发送不就可以了吗?

但很快发现问题:当短信数量很大时,不仅耗时,而且成功率很低。

于是想到,用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实现消息队列相关推荐

  1. php mysql千万级数据修改_PHP 结合 MySQL 千万级数据处理

    mysql分表思路 一张一亿的订单表,可以分成五张表,这样每张表就只有两千万数据,分担了原来一张表的压力,分表需要根据某个条件进行分,这里可以根据地区来分表,需要一个中间件来控制到底是去哪张表去找到自 ...

  2. apache php mysql是长连接吗_php关于mysql长连接问题

    1.当 函数 mysql_connect 的前三个参数(server username password)相同,并且第四个参数(new_link)不传递时候,重复调用mysql_connect 是会返 ...

  3. mysql 9.0创建数据库_PHP与MySQL学习笔记9:创建Web数据库

    1.在服务器上部署MySQL服务基本步骤合注意点 1)安装MySQL(命令安装.安装包安装等) 2)考虑是否需要一个独立的操作系统用户权限来运行MySQL程序. 3)路径的设置 4)root密码 (附 ...

  4. php mysql两个表合并_php操作mysql两个数据库中表的数据同步

    题记: 我们开发当中经常会遇到,数据同步.比如将teaching数据库中area表的数据同步到study数据库中zone表中. 备注:这两个数据库不同,数据表名字也不同,但数据表的结构相同.不同表结构 ...

  5. PHP连接MySQL数据常用的函数_PHP操作Mysql常用函数

    一.操作步骤: 连接MySQL数据库 $link = mysql_connect($db_config['host'], $db_config['user'], $db_config['pwd']) ...

  6. mysql mof提权原理_关于mysql mof提权研究

    无意中看到有关mysql的这种提权方式,趁着有空余时间便研究了起来,发现网上有挺多地方写的不够详细的,研究的时候也卡壳了一段时间. 利用前提:操作系统为windows 操作系统版本不宜太高,2008测 ...

  7. mysql killed进程不结束_php和mysql连接方式(短 长 池)

    一个php work进程只能处理一个请求,当完成一个请求了,才能处理下一次的请求 2.短连接: 执行到php关闭mysql连接的代码时,就断开,否则在处理本次请求结束的时候,释放mysql连接 实验: ...

  8. mysql的覆盖索引原理_「Mysql索引原理(七)」覆盖索引

    通常大家都会根据查询的WHERE条件来创建合适的索引,不过这只是索引优化的一个方面.设计优秀的索引应该考虑到整个查询,而不单单是WHERE条件部分.索引确实是一种查找数据的高效方式,但是MySQL也可 ...

  9. php如何在mysql数据库里创建表_php创建mysql数据库以及数据表

    php创建mysql数据库以及数据表 用php链接到mysqli,成功后利用,mysqli_query()创建数据库以及数据表. $con = mysqli_connect("localho ...

最新文章

  1. This tutorial code needs the xfeatures2d contrib module to be run.
  2. ITK:形态分水岭MorphologicalWatershed分割
  3. luogu2839 [国家集训队]middle
  4. npm执行命令后无任何响应(windows下)
  5. [即将举行的网络研讨会]对Kubernetes进行故障排除:您需要具备的7个关键组件
  6. beeshell —— 开源的 React Native 组件库
  7. RTFM? 如何写一本值得一读的手册
  8. oracle undo head,淺談Oracle的undo管理
  9. datetime.strptime格式转换报错ValueError
  10. Stack with max and min 查找栈中最大最小数
  11. 搭建php环境,更换织梦服务器
  12. 【matlab数字图像处理】数字图像处理中的坐标系
  13. MFC对磁盘测速工具CrystalDiskMark6_0_0的工厂方式控制源代码 同时控制 8个窗口,界面同步显示,比较完整点的版本
  14. 简明python指南(预览版)
  15. CN_计算机网络体系结构概念@IP数据报(分组)结构@各层报文(PDU)之间的关系@PDU协议数据单元
  16. Android自定义View之仿QQ运动步数进度效果
  17. 惠普台式计算机配置,hp惠普台式机bios设置图文教程
  18. 公众号点击图片变成另一张_公众号互动内容:小众潮流or下一个风口?
  19. Springboot 瘦身打包
  20. 字符的编码表示——ASCII码、国标码、Unicode码

热门文章

  1. IPM: Generate IP Product via template
  2. 关于错误Resource interpreted as Script but transferred with MIME type text_html
  3. SAP ABAP实用技巧介绍系列之如何生成值为NULL的table row
  4. Java SpringAOP学习之How is beforeMethodAdvice called
  5. SAP UI5在本地运行和部署到服务器后运行的差异
  6. 使用ABAP批量下载Markdown源文件里的图片到本地
  7. centos中bash占用cpu,linux下如何定位CPU占用高的进程的问题点
  8. mysql级联_MySQL 级联复制(A-B-C)
  9. python小学生口算题生成器_小学数学题出题神器
  10. jenkins搭建_自动化测试系列之jenkins配置搭建环境