php redis消息订阅与发布_PHP实现redis订阅和发布(用于异步任务处理)
搜索热词
1.概念
名称及含义
channel频道:生产者和消费者直接操作的对象
publish生产者:向channel发送消息
subscribe消费者:订阅一个或多个channel
psubscribe消费者:匹配订阅一个或多个channel
punsubscribe退订:匹配退订,无参数则退订全部channel
unsubscribe退订:退订指定的channel,无参数则退订全部channel
pubsub列出当前活动channel(至少有一个订阅)
2.注意事项
1)生产者publish消息时打开一个连接,publish后连接可以立即关闭
2)channel只接收publish发送的消息,自身不存储消息,如果channel没有被订阅,则消息丢弃
3)订阅的消费者需要一直在线,阻塞获取消息,连接断开表示立即退订
3.redis可以实现发布订阅和消息队列的功能,两者的区别在于:
1)redis的订阅者可以是多个,且可以同时处理发布上来的消息,如果订阅者不在线(服务没有启动)消息将丢失,消息没有持久化。发布和订阅是一块执行的,缺少一个直接忽略这个消息
2)消息队列只能有一个客户端来处理,处理完之后消息就被标记或删除,即使服务端没有启动消息也不会丢失
3)两者的使用场景要根据业务数据的准确度,敏感性决定,比如日志就可以用redis发布订阅来实现,丢失一点也没有关系
4.直接使用PHP-redis扩展提供的方法实现发布订阅
1)消费者订阅Subscribe.PHP
//设置PHP脚本执行时间
set_time_limit(0);
//设置socket连接超时时间
ini_set('default_socket_timeout',-1);
//声明测试频道名称
$channelName = "testPubSub";
$channelName2 = "testPubSub2";
try {
$redis = new Redis();
//建立一个长链接
$redis->pconnect('ip',6379);
//阻塞获取消息
$redis->subscribe(array($channelName,$channelName2),function ($redis,$chan,$msg) {
echo "channel:".$chan.",message:".$msg."\n";
});
} catch (Exception $e) {
echo $e->getMessage();
}
2)生产者发送消息Publish.PHP
$channelName = "testPubSub";
$channelName2 = "testPubSub2";
//向指定频道发送消息
try {
$redis = new Redis();
$redis->connect('192.168.75.132',6379);
for ($i=0;$i<5;$i++) {
$data = array('key' => 'key'.$i,'data' => 'testdata');
$ret = $redis->publish($channelName,json_encode($data));
print_r($ret);
}
} catch (Exception $e) {
echo $e->getMessage();
}
3)执行消费者订阅,开始阻塞获取消息PHP Subscribe.PHP
4)执行生产者,开始发送消息PHP Publish.PHP
PHP .\Publish.PHP
22222
#返回执行结果:频道的订阅数量
查看消费者终端
PHP .\Subscribe.PHP
channel:testPubSub,message:{"key":"key0","data":"testdata"}
channel:testPubSub,message:{"key":"key1",message:{"key":"key2",message:{"key":"key3",message:{"key":"key4","data":"testdata"}
转自:https://www.jmsite.cn/blog-586.html
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
php redis消息订阅与发布_PHP实现redis订阅和发布(用于异步任务处理)相关推荐
- php redis消息订阅与发布_PHP使用Redis实现订阅发布与批量发送短信
原标题:PHP使用Redis实现订阅发布与批量发送短信 1 什么是redis订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息.直接点, ...
- php使用redis消息队列swoole,EasySwoole中利用redis实现消息队列
什么是队列? 从数据结构上来讲,队列是一种先进先出的数据结构 什么是消息队列? 消息队列可以简单理解为:把要传输的数据放在队列中 消息队列可以分为生产者和消费者,将传输的数据放到消息队列当中,就相当于 ...
- springboot整合redis消息队列
前言 消息队列作为一种常用的异步通信解决方案,而redis是一款高性能的nosql产品,今天就给大家介绍一下,如何使用redis实现消息队列,并整合到springboot. 两个消息模型 1. 队列模 ...
- Redis+消息通知处理代金券过期问题
Redis+消息通知处理代金券过期问题 ###1.过期问题解决方案的分析 课程引导语 在电商系统中,秒杀,抢购,红包优惠卷等操作,一般都会设置时间限制,比如订单15分钟不付款自动关闭,红包有效期24小 ...
- redis消息队列,你还不敢用?
文章目录 前言 一.关于消息队列 1.应用场景 2.如何设计消息队列 二.Redis 消息队列解决方案 1.基于 List 的消息队列解决方案 2.基于 zset 的消息队列解决方案 3.基于 Str ...
- Redis消息订阅发布
Redis的发布订阅(pub/sub)是一种 消息通信模式 : 发送者(pub)发送消息,订阅者(sub)接收消息 redis客户端可以订阅任意数量的频道 消息发送者 频道 消息接收者 redis频道 ...
- Redis - 消息发布订阅机制
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息.发布者生产消息放到队列里,多个监听队列的消费者都会收到同一份消息. Redis客户端可以订 ...
- 调试笔记 — Redis 消息队列发布信息被消费者重复订阅多次牵扯到的 Tomcat 配置问题 [#00001]
最近在项目中发现了一个奇葩的 BUG ,当用户调用后台时,后台向消息队列中发布一条消息,这条消息会被监听器(消费者)监听到,有趣的事情就在这里,此时由于只发送了一条消息,照理说监听器应该只会触发一次, ...
- java实现Redis消息发布订阅
Redis发布订阅架构 Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel. 发布者和订阅者都是Redis客户端,Channel则为 ...
最新文章
- 如何在Windows Server 2008 Core里面添加Role~~~
- 清华大学-刘知远:自然语言理解难在哪儿?
- 一行代码都不用写,教你如何快速搭建Github博客!!!
- repeater 控件嵌套
- 理解 RXSwift:单元测试(四)
- 数组:三种初始化及内存分析
- 【机器学习】竞争神经网络(Competitive Neural Network)的python实现
- Linux 查看ssh登录日志 ssh登录记录
- 计算机基础知识_进制转化
- 阿里云播放器组件 vue-aliplayer
- iris流程图_IRIS项目管理流程
- c 语言 随机值的生成器,C 语言随机数生成器的实现分析
- PS压缩图片文件大小,不失真!!!
- php eot,php中理解print的EOT分界符
- 华为交换机导入配置_华为交换机通用配置方式方法
- 有没有一款软件是测试阅读准确率的,当今各一线股票软件系统指标准确率测试一览表...
- 基于FPGA的火焰识别系统开发——简化版
- 【实践】haskell、coq基本语法
- OpenGl入门基础知识-叩开3D的心扉
- Android 一种关于解决 No view found for id xxxx for fragment xxxx 问题的方案