搜索热词

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订阅和发布(用于异步任务处理)相关推荐

  1. php redis消息订阅与发布_PHP使用Redis实现订阅发布与批量发送短信

    原标题:PHP使用Redis实现订阅发布与批量发送短信 1 什么是redis订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息.直接点, ...

  2. php使用redis消息队列swoole,EasySwoole中利用redis实现消息队列

    什么是队列? 从数据结构上来讲,队列是一种先进先出的数据结构 什么是消息队列? 消息队列可以简单理解为:把要传输的数据放在队列中 消息队列可以分为生产者和消费者,将传输的数据放到消息队列当中,就相当于 ...

  3. springboot整合redis消息队列

    前言 消息队列作为一种常用的异步通信解决方案,而redis是一款高性能的nosql产品,今天就给大家介绍一下,如何使用redis实现消息队列,并整合到springboot. 两个消息模型 1. 队列模 ...

  4. Redis+消息通知处理代金券过期问题

    Redis+消息通知处理代金券过期问题 ###1.过期问题解决方案的分析 课程引导语 在电商系统中,秒杀,抢购,红包优惠卷等操作,一般都会设置时间限制,比如订单15分钟不付款自动关闭,红包有效期24小 ...

  5. redis消息队列,你还不敢用?

    文章目录 前言 一.关于消息队列 1.应用场景 2.如何设计消息队列 二.Redis 消息队列解决方案 1.基于 List 的消息队列解决方案 2.基于 zset 的消息队列解决方案 3.基于 Str ...

  6. Redis消息订阅发布

    Redis的发布订阅(pub/sub)是一种 消息通信模式 : 发送者(pub)发送消息,订阅者(sub)接收消息 redis客户端可以订阅任意数量的频道 消息发送者 频道 消息接收者 redis频道 ...

  7. Redis - 消息发布订阅机制

    Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息.发布者生产消息放到队列里,多个监听队列的消费者都会收到同一份消息. Redis客户端可以订 ...

  8. 调试笔记 — Redis 消息队列发布信息被消费者重复订阅多次牵扯到的 Tomcat 配置问题 [#00001]

    最近在项目中发现了一个奇葩的 BUG ,当用户调用后台时,后台向消息队列中发布一条消息,这条消息会被监听器(消费者)监听到,有趣的事情就在这里,此时由于只发送了一条消息,照理说监听器应该只会触发一次, ...

  9. java实现Redis消息发布订阅

    Redis发布订阅架构 Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel. 发布者和订阅者都是Redis客户端,Channel则为 ...

最新文章

  1. 如何在Windows Server 2008 Core里面添加Role~~~
  2. 清华大学-刘知远:自然语言理解难在哪儿?
  3. 一行代码都不用写,教你如何快速搭建Github博客!!!
  4. repeater 控件嵌套
  5. 理解 RXSwift:单元测试(四)
  6. 数组:三种初始化及内存分析
  7. 【机器学习】竞争神经网络(Competitive Neural Network)的python实现
  8. Linux 查看ssh登录日志 ssh登录记录
  9. 计算机基础知识_进制转化
  10. 阿里云播放器组件 vue-aliplayer
  11. iris流程图_IRIS项目管理流程
  12. c 语言 随机值的生成器,C 语言随机数生成器的实现分析
  13. PS压缩图片文件大小,不失真!!!
  14. php eot,php中理解print的EOT分界符
  15. 华为交换机导入配置_华为交换机通用配置方式方法
  16. 有没有一款软件是测试阅读准确率的,当今各一线股票软件系统指标准确率测试一览表...
  17. 基于FPGA的火焰识别系统开发——简化版
  18. 【实践】haskell、coq基本语法
  19. OpenGl入门基础知识-叩开3D的心扉
  20. Android 一种关于解决 No view found for id xxxx for fragment xxxx 问题的方案

热门文章

  1. 云朵君微信表情包第二弹「云朵子贺岁篇」震撼来袭!!!
  2. html图片自动在div里放大,css图片自适应div大小怎么做
  3. 资源不足的情况怎么设置sparkrdd并行度_弃考率超30%,2020国考职位达不到开考比例怎么办?...
  4. pytorch 梯度爆炸调试方法
  5. 教你从头写游戏服务器框架 1
  6. 文件上传(显示进度条、上传速度)
  7. 图片存储架构学习:缓存,架构师的美丽小三(一)
  8. ADB命令杀死终端应用方法
  9. 基于TF-IDF与KMeans的海量新闻文本聚类
  10. 固定资产变动,查询找不到相应卡片