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实现订阅发布与批量发送短信相关推荐

  1. 4che3 scu发送超时设置_Redis实现订阅发布与批量发送短信

    1 什么是redis订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息.直接点,你可以理解为我关注了你,你发布了信息,文章等,我就可以立 ...

  2. php redis消息订阅与发布_PHP使用Redis实现订阅发布与批量发送短信

    原标题:PHP使用Redis实现订阅发布与批量发送短信 1 什么是redis订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息.直接点, ...

  3. 马化腾对短视频志在必得?腾讯又双叒叕发布了一款短视频App

    11月1日消息,2018年腾讯全球合作伙伴大会在南京召开,腾讯副总裁林松涛宣布正式发布新一代短视频产品Yoo. 林松涛表示,Yoo将定位精品原创短视频平台,希望主打视频领域的消费升级.他谈到,短视频行 ...

  4. java短信验证码功能发送的验证码如何校验_java 实现发送短信验证码功能

    原标题:java 实现发送短信验证码功能 如何使用java + maven的项目环境发送短信验证码,本文使用的是榛子云短信 的接口. 1. 安装sdk 下载地址: http://smsow.zhenz ...

  5. java调用app接口代码_java servlet手机app访问接口(二)短信验证

    今天找了几个短信平台,其实最想使用的一个是sharesdk,使用它上面http api短信功能,不仅价格低,而且最少可以充值100RMB,但是审核过于严格,对应APP还必须集成他们的短信功能,而且要上 ...

  6. 手机短信验证码登录功能的开发实录(机器识别码、短信限流、错误提示、发送验证码倒计时60秒)

    短信验证码登录功能 项目分析 核心代码 1.外部js库调用 2.HTML容器构建 3.javaScript业务逻辑验证 4.后端验证逻辑 总结 短信验证码是通过发送验证码到手机的一种有效的验证码系统, ...

  7. java短信内容加链接_Java加腾讯云实现短信验证码功能

    准备工作 1.选择服务 2.添加应用:我已经添加完了 3.点击应用名称 4.出现ID和Key 5.编辑短信创建签名 6.在第5步后 使用到的jar包: qcloudsms-1.0.2.jar com. ...

  8. php实现短信找回密码,thinkphp5怎么调用云片接口实现发送短信验证码找回密码功能...

    thinkphp5怎么调用云片接口实现发送短信验证码找回密码功能 发布时间:2020-12-11 12:33:42 来源:亿速云 阅读:60 作者:小新 小编给大家分享一下thinkphp5怎么调用云 ...

  9. 企业群发短信时为什么要找短信平台公司而不是直接找运营商发送

    对于初次有短信接口.短信通知.短信验证码等短信发送需求的用户来说,难免会有一个困惑,为什么发送短信时要找第三方短信平台公司/短信服务商,而不是直接找运营商呢? 一.首先我们要了解一下短信发送的路径: ...

  10. 短信API随机验证码加60秒后重新发送短息验证码

    短信API随机验证码加60秒后重新发送短息验证码 SMS短信验证,随机数验证码 JS /* 短信验证码 */$("#fasongyanzhengma").click(functio ...

最新文章

  1. <java并发编程实践>读书笔记三
  2. 小程序开发系类之基础部分-开发工具
  3. 使用jenkins实现监控嵌入式设备稳定性之二----脚本部分
  4. JavaScript动态加载js文件
  5. 淘票票首次公开小程序开发秘籍,踩过坑才知道怎么走!
  6. MYSQL临时表创建索引
  7. Docker学习四:Docker 网络
  8. [转载]使用Response.Filter过滤非法词汇
  9. lodop转到其他html页面,vue项目中使用Lodop实现批量打印html页面和pdf文件
  10. 【Chrome插件】使用FE助手-百度WEB前端助手
  11. 【MM小贴士】SAP 批次双单位 CWM 的使用演示
  12. LumaQQ开发文档
  13. 树莓派查看CPU温度
  14. 集团申请选择企业邮箱注意事项
  15. win7 mysql 应用程序无法启动因为应用程序的并行配置不正确
  16. 最新蓝奏云php直链源码,蓝奏云直链源码
  17. H3C防火墙升级系统版本报错:No sufficient storage space on the device
  18. 一个应届生拿字节跳动offer的努力,整整用了一年的时间
  19. 机器学习实践:足球比赛聚类分析--11
  20. Tomcat顽固性乱码解决

热门文章

  1. Asterisk-Javanbsp;教程(中文版)…
  2. cdrom是什么意思_CD-ROM是什么意思
  3. 数字三角形- Java(超简单写法)
  4. sprint敏捷开发
  5. TortoiseGit - 详细提交流程
  6. jqueryui引用出错(base is not a constructor,widget no found)
  7. 四大行业晋身今秋求贤大户 游戏人才缺口奇大
  8. 共享电单车重蹈覆辙:新车投放半年就进“坟场”
  9. Allegro PCB导入网表后,PCB规则变化怎么办?
  10. Jmeter---脚本录制