java 短信批量发送_Redis实现订阅发布与批量发送短信
1 什么是redis订阅
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。直接点,你可以理解为我关注了你,你发布了信息,文章等,我就可以立马收的到。
2 发布订阅的场景在哪里
比如以下几个场景:
2.1 典型的网页上的消息可以做到实时通知
2.2 订单下单以后 通过redis订阅实时通知库存改变
2.3 接口需要做一些比如发送邮件 写日志等功能的时候可以运用到redis订阅了 这样会加快接口返回时间
3 php如何实现 实时发布订阅
知道了什么是订阅,发布的场景,下面来看看如何用php与redis实现发布订阅
3.1 cli.php,这个为订阅端的代码 主要注意的是这个代码放在cli下执行 php
while (true){
echo time();
ini_set('default_socket_timeout', -1); //不超时
$redis = new Redis();
$redis->connect('127.0.01', 6379, 3600);
$redis->auth('123456'); //设置密码
$result = $redis->subscribe(['test'],'callback');
print_r($result);
sleep(0.1);
}
function callback($instance,$channelName,$message)
{
print_r($message);
}
启动以后接下来我们来个发布端的代码
3.2 发布端的代码,pub.php 这个代码可以放在普通网页下执行
$redis = new Redis();
$redis->connect('127.0.0.1', 6379, 3600);
$redis->auth('123456'); //设置密码
$message = '测试一下';
$ret=$redis->publish('test',$message);
到这里php redis订阅发布成功,是不是很简单,主要用到redis的subscribe方法,publish方法,当然这些代码在实际使用过程中还是可以优化的比如cli.php,根据自己的需要去实现吧。
这里贴个laravel实现的发布订阅的例子
#获取订阅到的消息
创建laravel的php artisan命令在handle里执行监代码
laravel的php artisan list命令可以查看当前的任务,然后使用Linux的nohub命令在后台常驻即可
public function handle()
{
#订阅消息redis
$redis = new \Redis();
$redis->pconnect(Config("host"), Config("port"));
$redis->auth(Config("password"));
//订阅订单id ORDERID
$redis->subscribe(['ORDERID'], function($redis, $channel,$message) {
if ($channel == 'ORDERID'){
#这里$message为10002
if ($message){
//存储到自己的redis库 这里配置了多连接
$redis2 = Redis::connection('driver_outset_time');
$redis2->set('ORDERID_'.$message,time());#value为时间time()
$redis2->EXPIRE('ORDERID_'.$message,time(), 24*60*60);#设置key过期时间为24小时
$this->xxxxx($message,xxx);#调用其他方法执行其他业务逻辑
}
}
});
}
接下来看看如何实现批量发送短信
1.首先将需要发送信息的手机号存入redis缓存
$redis = new \redis();
$conn = $redis->connect('localhost', 6379);
$auth = $redis->auth('*****'); //redis设置了密码,需要认证
$list = Testuser::find()->asarray()->all();
for ($i=0; $i < count($list); $i++) {
$redis->lpush('list',$list[$i]['email']);
}
将所需发送的手机号存入到redis缓存中
2.调用短信接口发送短信
$redis = new \redis();
$conn = $redis->connect('localhost', 6379);
$auth = $redis->auth('*****');
$lenth = $redis->llen('list');
for ($i=0; $i < $lenth ; $i++) {
$phone = $redis->brpop('list',1,60);//从结尾处弹出一个值,超时时间为60s
$phonenumber = $phone[1];
$sendmsg = send($phonenumber);
if($sendmsg){
//处理发送成功的逻辑
}else{
//处理发送失败的逻辑
}
usleep(500000);//微秒,调用第三方接口,需要注意频率,
}
这里结合php的cli模式,通过函数exec触发命令。直接后台执行。
java 短信批量发送_Redis实现订阅发布与批量发送短信相关推荐
- 4che3 scu发送超时设置_Redis实现订阅发布与批量发送短信
1 什么是redis订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息.直接点,你可以理解为我关注了你,你发布了信息,文章等,我就可以立 ...
- php redis消息订阅与发布_PHP使用Redis实现订阅发布与批量发送短信
原标题:PHP使用Redis实现订阅发布与批量发送短信 1 什么是redis订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息.直接点, ...
- 马化腾对短视频志在必得?腾讯又双叒叕发布了一款短视频App
11月1日消息,2018年腾讯全球合作伙伴大会在南京召开,腾讯副总裁林松涛宣布正式发布新一代短视频产品Yoo. 林松涛表示,Yoo将定位精品原创短视频平台,希望主打视频领域的消费升级.他谈到,短视频行 ...
- java短信验证码功能发送的验证码如何校验_java 实现发送短信验证码功能
原标题:java 实现发送短信验证码功能 如何使用java + maven的项目环境发送短信验证码,本文使用的是榛子云短信 的接口. 1. 安装sdk 下载地址: http://smsow.zhenz ...
- java调用app接口代码_java servlet手机app访问接口(二)短信验证
今天找了几个短信平台,其实最想使用的一个是sharesdk,使用它上面http api短信功能,不仅价格低,而且最少可以充值100RMB,但是审核过于严格,对应APP还必须集成他们的短信功能,而且要上 ...
- 手机短信验证码登录功能的开发实录(机器识别码、短信限流、错误提示、发送验证码倒计时60秒)
短信验证码登录功能 项目分析 核心代码 1.外部js库调用 2.HTML容器构建 3.javaScript业务逻辑验证 4.后端验证逻辑 总结 短信验证码是通过发送验证码到手机的一种有效的验证码系统, ...
- java短信内容加链接_Java加腾讯云实现短信验证码功能
准备工作 1.选择服务 2.添加应用:我已经添加完了 3.点击应用名称 4.出现ID和Key 5.编辑短信创建签名 6.在第5步后 使用到的jar包: qcloudsms-1.0.2.jar com. ...
- php实现短信找回密码,thinkphp5怎么调用云片接口实现发送短信验证码找回密码功能...
thinkphp5怎么调用云片接口实现发送短信验证码找回密码功能 发布时间:2020-12-11 12:33:42 来源:亿速云 阅读:60 作者:小新 小编给大家分享一下thinkphp5怎么调用云 ...
- 企业群发短信时为什么要找短信平台公司而不是直接找运营商发送
对于初次有短信接口.短信通知.短信验证码等短信发送需求的用户来说,难免会有一个困惑,为什么发送短信时要找第三方短信平台公司/短信服务商,而不是直接找运营商呢? 一.首先我们要了解一下短信发送的路径: ...
- 短信API随机验证码加60秒后重新发送短息验证码
短信API随机验证码加60秒后重新发送短息验证码 SMS短信验证,随机数验证码 JS /* 短信验证码 */$("#fasongyanzhengma").click(functio ...
最新文章
- 博士毕业,信心满满的去面算法工程师,竟然凉了...
- Unsupported ONNX opset version: 11
- 用python查询数据库_用python 做数据库查询
- canvas三环加载进度条
- linux退出 putty_使用putty远程连接linux防止关闭putty程序就停止
- Vue 第九天学习
- 算法与数据结构(python):树与二叉树
- c语言电报关系的题目,c语言所有题目以跟答案.doc
- 阿里巴巴Android面试都问些什么?系列篇
- bool类型_C语言编程第11讲——C语言的布尔类型
- 新生的 XInclude
- arduino 停止程序_Arduino用ISD1820语音录放模块制作留言机
- mybatis运行流程
- 前端视频插件Video.js的基本使用
- Revisiting RCNN: On Awakening the Classification Power of Faster RCNN解读
- php 单词替换,单词替换 - Shiyin's note
- Error Domain=AVFoundationErrorDomain Code=-11841 (null) timeRange 和 duration 不一致
- OA之我的会议(会议排座送审)
- 您可能不知道WooCommerce可以做的10件事
- 网络变压器在以太网中的作用
热门文章
- iphone计算机照片要求,如何将照片从iPhone传输到计算机
- bat脚本打开cmd执行命令
- java调用平方函数_java中的数学计算函数的总结
- [找规律] 三角形个数(牛客+找规律+思维+代码优化)
- 关于egret引擎游戏开发的笔记-1
- 毫米和像素怎么换算_像素和毫米怎么换算啊??
- python中实现简单抽样的函数
- HighCharts柱状图显示百分比
- 给自己的逆向工程阶段性学习感想总结
- keil5 调试不进主函数一直卡在0x1FFFF3B2 F8D01808 LDR r1,[r0,#0x808]