首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Redis实现订阅发布与批量发送短信

Redis实现订阅发布与批量发送短信

作者头像
友儿
发布2022-09-11 10:28:38
发布2022-09-11 10:28:38
1.1K0
举报
文章被收录于专栏:友儿友儿

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
代码语言:javascript
复制
<?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 这个代码可以放在普通网页下执行
代码语言:javascript
复制
<?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命令在后台常驻即可
代码语言:javascript
复制
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缓存
代码语言:javascript
复制
$redis = new \redis();
$conn = $redis->connect('localhost', 6379);
$auth = $redis->auth('*****'); //redis设置了密码,需要认证
$list = Testuser::find()->asarray()->all();
for ($i=0; $i &lt; count($list); $i++) { 
    $redis->lpush('list',$list[$i]['email']);
}
将所需发送的手机号存入到redis缓存中

2.调用短信接口发送短信

代码语言:javascript
复制
$redis = new \redis();
$conn = $redis->connect('localhost', 6379);
$auth = $redis->auth('*****');
$lenth = $redis->llen('list');

for ($i=0; $i &lt; $lenth ; $i++) { 
    $phone = $redis->brpop('list',1,60);//从结尾处弹出一个值,超时时间为60s
    $phonenumber = $phone[1];
    $sendmsg = send($phonenumber);

    if($sendmsg){
        //处理发送成功的逻辑
    }else{
        //处理发送失败的逻辑
    }
    usleep(500000);//微秒,调用第三方接口,需要注意频率,
}
这里结合php的cli模式,通过函数exec触发命令。直接后台执行。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 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
    • 启动以后接下来我们来个发布端的代码
    • 3.2 发布端的代码,pub.php 这个代码可以放在普通网页下执行
    • 到这里php redis订阅发布成功,是不是很简单,主要用到redis的subscribe方法,publish方法,当然这些代码在实际使用过程中还是可以优化的比如cli.php,根据自己的需要去实现吧。
    • 这里贴个laravel实现的发布订阅的例子
    • 获取订阅到的消息
    • 创建laravel的php artisan命令在handle里执行监代码 laravel的php artisan list命令可以查看当前的任务,然后使用Linux的nohub命令在后台常驻即可
    • 接下来看看如何实现批量发送短信 1.首先将需要发送信息的手机号存入redis缓存
    • 将所需发送的手机号存入到redis缓存中
  • 2.调用短信接口发送短信
    • 这里结合php的cli模式,通过函数exec触发命令。直接后台执行。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档