php redis 批量发邮件,Redis实现订阅发布与批量发送短信

本文介绍了Redis的发布订阅功能,用于实现实时消息传递。在PHP中,利用Redis的subscribe和publish方法,可以创建订阅端和发布端。例如,在网页消息通知、订单状态更新和接口异步处理等场景下,Redis订阅发布能提高效率。文中还提供了PHP CLI模式下的订阅端和发布端代码示例,并展示了如何在Laravel框架中实现订阅发布。此外,还演示了如何使用Redis批量发送短信的流程。
摘要由CSDN通过智能技术生成

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);

}

5ab4e8fa2aef957e3e0a57f4994d0c38.png

启动以后接下来我们来个发布端的代码

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触发命令。直接后台执行。

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要戳这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值