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. 博士毕业,信心满满的去面算法工程师,竟然凉了...
  2. Unsupported ONNX opset version: 11
  3. 用python查询数据库_用python 做数据库查询
  4. canvas三环加载进度条
  5. linux退出 putty_使用putty远程连接linux防止关闭putty程序就停止
  6. Vue 第九天学习
  7. 算法与数据结构(python):树与二叉树
  8. c语言电报关系的题目,c语言所有题目以跟答案.doc
  9. 阿里巴巴Android面试都问些什么?系列篇
  10. bool类型_C语言编程第11讲——C语言的布尔类型
  11. 新生的 XInclude
  12. arduino 停止程序_Arduino用ISD1820语音录放模块制作留言机
  13. mybatis运行流程
  14. 前端视频插件Video.js的基本使用
  15. Revisiting RCNN: On Awakening the Classification Power of Faster RCNN解读
  16. php 单词替换,单词替换 - Shiyin's note
  17. Error Domain=AVFoundationErrorDomain Code=-11841 (null) timeRange 和 duration 不一致
  18. OA之我的会议(会议排座送审)
  19. 您可能不知道WooCommerce可以做的10件事
  20. 网络变压器在以太网中的作用

热门文章

  1. iphone计算机照片要求,如何将照片从iPhone传输到计算机
  2. bat脚本打开cmd执行命令
  3. java调用平方函数_java中的数学计算函数的总结
  4. [找规律] 三角形个数(牛客+找规律+思维+代码优化)
  5. 关于egret引擎游戏开发的笔记-1
  6. 毫米和像素怎么换算_像素和毫米怎么换算啊??
  7. python中实现简单抽样的函数
  8. HighCharts柱状图显示百分比
  9. 给自己的逆向工程阶段性学习感想总结
  10. keil5 调试不进主函数一直卡在0x1FFFF3B2 F8D01808 LDR r1,[r0,#0x808]