原标题:PHP使用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

edis();

$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

edis();

$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触发命令。直接后台执行。返回搜狐,查看更多

责任编辑:

php redis消息订阅与发布_PHP使用Redis实现订阅发布与批量发送短信相关推荐

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

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

  2. php使用redis的批量发送短信

    1.首先将需要发送信息的手机号存入redis缓存 $redis = new \redis();$conn = $redis->connect('localhost', 6379);$auth = ...

  3. 手机异步发送短信验证码解决方案-Celery+redis

    Celery介绍和使用 一.Celery介绍: 一个简单.灵活且可靠.处理大量消息的分布式系统,可以在一台或者多台机器上运行. Celery是一个功能完备即插即用的任务队列 单个 Celery 进程每 ...

  4. php redis 短信频率,发送短信: 使用Redis限制每天的发送频率和发送时间

    ratelimiting.lua --[[实现访问频率的脚本.参数:KEY[1] 用来标识同一个用户的idARGV[1] 过期时间ARGV[2] 过期时间内可以访问的次数返回值: 如果没有超过指定的频 ...

  5. SpringCloud集成发送短信--容联云通讯--Redis

    SpringCloud集成–容联云通讯–Redis 发送短信微服务 项目结构 配置文件 pom.xml <?xml version="1.0" encoding=" ...

  6. springboot整合redis实现发送短信验证码

    我用的短信平台是阿里云的,需要付费购买服务,购买地址:https://common-buy.aliyun.com/?spm=5176.8195934.907839.sms6.312c4183mzE9Y ...

  7. 阿里大于发送短信(用户微服务--消息微服务)

    阿里大于官网 官网流程文档: https://help.aliyun.com/document_detail/55284.html?spm=a2c4g.11186623.6.567.77f914d1Q ...

  8. html调用短信接口发送消息的实例,HTTP电脑发送短信接口调用示例

    一.工作方式 双方通过HTTP方式交互数据,第三方可以简单的"name=value"方式发送提交内容或响应请求内容.即通过HTTP的GET/POST方式交换. 另外双方需要保证数据 ...

  9. 微服务架构集成RabbitMQ给用户推送消息(发送短信,发送邮件,发送站内信息)

    因为是分布式微服务项目,所以发送方在一个微服务,接收方在另外的一个微服务,在发送方,导入RabbitMQ依赖包 <!--RabbitMQ依赖--><dependency>< ...

最新文章

  1. C enum(枚举)
  2. 家用电脑虚拟机做服务器_家用电脑能当服务器吗
  3. 【数学建模】图论模型-dijkstra算法(最优化)
  4. PHP新增与修改的区分
  5. android studio编译找不到程序包,【图片】哥哥们,android studio 打包的安装包手机无法识别怎么破【androidstudio吧】_百度贴吧...
  6. track_info分区表的创建并将ETL的数据加载到Hive表
  7. JS-函数(匿名-自调用-回调)-递归
  8. 在html中播放链接视频,如何在我的python脚本中使用HTML5在网站链接中播放视频?...
  9. [转载] python字符串转有符号数字_在python中将字符串转换为8位带符号整数
  10. java使用easypoi实现word模板导出
  11. Java-简易加法计算器代码优化
  12. [4G5G专题-81]:流程 - 4G LTE 小区切换流程大全
  13. 新浪云服务器配置说明(java+mysql)
  14. 乐高机器人编程主要学什么
  15. 【20220926】html综合案例世纪佳缘
  16. 【机器学习】手写数字识别学习笔记(对三篇文件进行分析记录)
  17. 入门C语言第二话:函数(上)之锻体篇,带你玩转函数(内有汉诺塔,青蛙跳台阶等经典问题,建议收藏和分享)
  18. android switch 未定义,源生Switch控件在Android4.4无法显示?
  19. 开始开发IAP ANE
  20. 【Linux】常见指令收官拓展

热门文章

  1. 达梦中级部分笔记(自用)
  2. python中文文本分析和提取_python str(使用python对txt文本进行分析和提取)
  3. Android Studio连接云服务器数据库
  4. 分析:谁能抗衡巨人和阿里巴巴
  5. 制作虚拟主机管理系统(二)
  6. 刚刚,吴恩达 ChatGPT 新课三连发!
  7. JavaXYQ 1.4 M1 - 完整的RPG游戏
  8. 数据分析中非常实用的自编函数和代码模块整理
  9. 【华为OD机试真题 JAVA】消消乐游戏
  10. nashorn 性能_Oracle Nashorn:用于JVM的下一代JavaScript引擎