php订阅系统,php redis pub/sub(Publish/Subscribe,发布/订阅的信息系统)之基本使用

本文详细介绍如何使用Redis的发布/订阅功能(Pub/Sub)实现即时消息通知,包括基本操作、模式匹配订阅,以及在PHP项目中的实际应用。通过实例演示了消息发布和订阅的过程,并展示了如何通过phpredis扩展在PHP中集成Redis功能。
摘要由CSDN通过智能技术生成

一.场景介绍

最近的一个项目需要用到发布/订阅的信息系统,以做到最新实时消息的通知。经查找后发现了redis pub/sub(发布/订阅的信息系统)可以满足我的开发需求,而且学习成本和使用成本也比较低。

二.什么是redis pub/sub

资料查看

大家在看我的blog的同时可以打开redis官方对于redis pub/sub的介绍,感觉看英文文档吃力的话 :cry: ,可以看redis中文网的翻译介绍.

Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能

基于事件的系统中,Pub/Sub是目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统所要求的松散耦合的交互模式:订阅者(如客户端)以事件订阅的方式表达出它有兴趣接收的一个事件或一类事件;发布者(如服务器)可将订阅者感兴趣的事件随时通知相关订阅者。

消息发布者,即publish客户端,无需独占链接,你可以在publish消息的同时,使用同一个redis-client链接进行其他操作(例如:INCR等)

消息订阅者,即subscribe客户端,需要独占链接,即进行subscribe期间,redis-client无法穿插其他操作,此时client以阻塞的方式等待“publish端”的消息;这一点很好理解,因此subscribe端需要使用单独的链接,甚至需要在额外的线程中使用。

三.redis pub sub(publish subscribe)之基本使用

下面我将配着实图(用我的本地机器环境)来为大家讲解redis的pub/sub怎么去使用 .

没有安装phpredis扩展的或者没有redis服务的,请参考我的 另一篇blog ,有详细的安装介绍,这里不再赘述了。

1、启动redis服务端

f266e93d01d9cb144e46ad19d0170d6d.png

2、启动redis客户端,并做为subscribe订阅端

新开一个终端,启动redis客户端,并做为subscribe客户端(消息订阅者),订阅一个名字叫test的频道信息:

cfa150ea066d393337f76390f18768e1.png

3、启动redis客户端,并做为publish客户端

发布一个名字叫test的频道,信息是:hello,world

e94bacebc46badae75485b1290ff10d9.png

4、查看订阅到的消息

再切换到2步骤中的redis客户端窗口,会发现,已经订阅到了刚才发布的 'hello,world'消息:

483045db4a80c884609ddbf067e9940a.png

其中,test为频道名称,hello,world即为消息

5、模式匹配订阅

Redis 的Pub/Sub实现支持模式匹配。

客户端可以订阅全风格的模式以便接收所有来自能匹配到给定模式的频道的消息。 比如,将接收所有发到 test.name,test.phone,test.address...等等的消息,该这样写:

PUBSCRIBE test.*

在终端回车后,同时再新的窗口里分别发布两个频道的消息,名字分别为:test.name和test.phone,然后切换到订阅端的窗口里,结果如下图所示:

efdfdc36c5817a95c36e62cb593fcb2c.png

由上图可以看出,在订阅了test.*频道后,一共收到了 test.name和test.phone两个频道的消息,这就是模式匹配订阅。

那么取消订阅匹配该模式的客户端也比较简单:

PUNSUBSCRIBE test.*

好,以上的这些简单的demo,就是关于redis pub/sub(Publish/Subscribe,发布/订阅的信息系统)的最基本使用。说了这么多,跟php也没有挂上什么钩,别着急,重要的都往往最后出场。

四.php redis pub/sub

phpredis的安装

redis的客户端连接支持多种语言。这里我用的是php的phpredis,它是用c语言编写的,目前已经作为php的一个模块扩展,没有安装的可以参考我的 另一篇blog ,已经安装的可以忽略此步骤.

命令手册

详细请看github 这里 。 这里我列出一些常用的:

Redis::__construct构造函数

$redis = new Redis();

connect, open 链接redis服务

参数

host: string,服务地址

port: int,端口号

timeout: float,链接时长 (可选, 默认为 0 ,不限链接时间)

注: 在redis.conf中也有时间,默认为300

pconnect, popen 不会主动关闭的链接

参考上面

setOption 设置redis模式

getOption 查看redis设置的模式

ping 查看连接状态

get 得到某个key的值(string值)

如果该key不存在,return false set 写入key 和 value(string值) 如果写入成功,return ture setex 带生存时间的写入值 $redis->setex('key', 3600, 'value'); // sets key → value, with 1h TTL. setnx 判断是否重复的,写入值 $redis->setnx('key', 'value'); $redis->setnx('key', 'value'); delete 删除指定key的值 返回已经删除key的个数(长整数) $redis->delete('key1', 'key2'); $redis->delete(array('key3', 'key4', 'key5'));

更详细的使用请参考这里 ,我就不写太多,因为我要直接摞代码了.

publish(消息发布端):pub.php

/**

* redis sub(消息订阅端)

* @ blog: phping.sinaapp.com

* @date 2016-04-24 15:00

*/

$redis = new Redis();

// 第一个参数为redis服务器的ip,第二个为端口 $res = $redis->connect('127.0.0.1', 6379); // test为发布的频道名称,hello,world为发布的消息 $res = $redis->publish('test','hello,world');

subscribe(消息订阅端): sub.php

/**

* redis sub(消息订阅端)

* @ blog: phping.sinaapp.com

* @date 2016-04-24 15:00

*/

$redis = new Redis();

$res = $redis->pconnect('127.0.0.1', 6379,0); $redis->subscribe(array('test'), 'callback'); // 回调函数,这里写处理逻辑 function callback($instance, $channelName, $message) { echo $channelName, "==>", $message,PHP_EOL; }

开始订阅redis消息

前面已经提到过,消息订阅者,即subscribe客户端,需要独占链接,即进行subscribe期间,redis-client无法穿插其他操作,此时client以阻塞的方式等待“publish端”的消息,所以我们用命令行来执行:

php启动redis订阅端

则 订阅消息的redis客户端已经启动,随时等待发布过来的消息并订阅该消息. 发布redis消息 同样,命令行执行消息发布端的脚本即可:

php pub.php

切换到消息订阅端的窗口

发现终端有输出,如下图

26e1658bf72108e39c4101059d968e08.png

哈哈,是不是 收到了发布端发布的'hello,world'这条消息呢。

php和mysql开发的报刊订阅管理系统 毕业设计整套列表:(80)ASP+ACCESS企业公司网站 ASP.NET+SQL2000销售管理系统 ASP+ACCESS网上考试系统 ASP.NET+ACCESS校友录毕业设计 ASP+ACCESS在线考试系统 ASP.NET+SQL2000校友录 ASP+ACCESS校友录 ASP.NET+SQL2000房地产管理系统 ASP+ACCESS企业网络管理系统 ASP.NET+SQL2000在线考试系统 ASP+ACCESS办公系统 ASP.NET+SQL2000信息安全学习网的设计与开发 ASP+ACCESS我的雅虎设计 ASP.NET+SQL2000点播 ASP+access留言板 ASP.NET+SQL2000网上购物商城 ASP+ACCESS BBS论坛的设计与实现 ASP.NET+SQL2000房地产管理系统 ASP+ACCESS个人网站 ASP.NET+SQL2000在线考试系统(数值分析) ASP+ACCESS图书管理系统 ASP.NET+SQL2000考试系统 ASP+ACCESS网上书店 ASP.NET+SQL2000商城 ASP+ACCESS网络招聘系统 VS2005(VB)家庭理财系统 ASP+ACCESS班级网站设计 ASP.NET+SQL在线视频点播系统 ASP+ACCESS企业网络管理系统 ASP.NET+SQL BBS管理系统 ASP+Access人事(人力资源)管理系统 ASP.NET+SQL2000学生成绩管理系统 asp+access网上购物系统 ASP+SQL客户关系管理系统 ASP+SQL旅游信息管理系统 ASP+SQL汽车销售网站 c#+access ktv点歌系统 网上书店acc全套 C#电子邮件客户端软件 星星在线考试系统 C#+SQL2005教材管理系统 ASP+SQL企业网络管理系统 ASP+ACCESS考试报名信息处理系统 VB.NET酒店管理信息系统 (asp+access)完整购物系统 (ASP+ACCESS)学生管理系统. ASP+ACCESS网上订水系统 ASP+ACCESS自学考试网站 ASP+ACCESS信息查询系统 ASP+ACCESS电子商务网站 ASP+ACCESS新闻发布系统 ASP+ACCESS投票系统 Delphi+access题库系统与试卷生成 jsp+access教学反馈系统 Delphi+sql酒店客房餐饮管理系统开发 JSP+Access论坛 Delphi考勤管理系统 JSP+Access网上拍卖平台系统 Delphi+access学籍管理程序 JSP+SQLServer网络教学管理系统 Delphi+sql试卷生成系统 JSP+SQLServer火车站订票系统 Delphi+access电子试卷生成系统 JSP+ACCESS网络教学系统 Delphi+access《数据库原理与应用》题库系统 JSP+SQLServer网上考试系统的设计与实现 Delphi+ACCESS三层图书管理 JSP+SQLServer网上书店系统 Delphi+access商品销售管理系统 JSP+SQLServer超市管理系统 Delphi+sql试卷生成系统 JSP+SQLServer销售管理系统 Delphi酒店客房餐饮管理系统 JSP+Access网上拍卖平台系统 Delphi+SQL ERP人力管理系统 JSP+SQLServer管理系统设计 Delphi+ACCESS高校科研管理系统 JSP+ACCESS进销管理系统. Delphi+ACCESS易能光盘管理系统 JSP+SQLServer企业产品销售管理系统 Delphi信息管理系统 JSP+SQLServer人事管理全套 Delphi家庭财账管理软件 JSP+SQL网络购物 Delphi加密设计+论文 JSP+SQL自动排课系统 delphi+access超市销售系统 JSP+SQL高校智能排课系统 JSP+Access网上拍卖平台系统2 JSP+SQL利云网上书店的设计与实现 JSP+SQL基于struts网上书店 JSP+ACCESS网上书店系统 PB+SQL医院门诊信息系统 JSP+SQL基于J2EE的网上书店系统 VB+SQL仓库管理 VC+ACCESS 16PF测评系统分析与设计 VB026图书管理系统 VC++ sql班级事务管理系统 VB+ACCESS高校科研管理系统 VC++ sql商品销售管理系统 VB+ACCESS计算机自动出卷系统 VC++ USB通信程序开发 VB+ACCESS酒店收费管理系统 VC+ACCESS 酒店餐饮管理系统 VB+ACCESS企业工资管理系统 VC++ 拳皇连连看 VB+ACCESS企业人事管理系统 VC++SQL工资管理系统 VB+ACCESS试卷生成系统 VC+SQL仓库管理 VB+ACCESS水费管理(宁夏职工科技学院) VC++网络故障排错向导机制的设计 VB+ACCESS题库管理系统+论文.rar VC++网络游戏-四国军棋 VB+access题库与计算机自动出卷系统 VC+ACCESS学生宿舍 VB+Access图书管理系统 VC+SQL 商品销售管理系统 VB+ACCESS學籍管理系統 VC+SQL工资管理系统 VB+ACCESS学生信息管理系统 vc+sql文档管理系统 VB+SQL医院病历管理系统 vc+SQL进销存管理系统 VB+ACCESS原创图书管理系统 vc视频会议管理系统 VB+SQL学生信息管理系统 vc图像处理 VB+sql房屋的中介管理 VC调度机制对网络QoS影响的研究分析 VB+SQL企业人力资源管理系统 VC+SQL学生成绩管理系统 VB+SQL铁岭香河商贸有限公司销售管理系统 VC人脸识别系统设计 VB+SQL物流管理系统2 VB+SQL物流管理系统 VB+SQL医院管理系统 单片机--模拟电动车油门设计.doc VB+SQL智能排课系统 单片机-基于网络的虚拟仪器测试系统 VB校园网管理 单片机-基于GSM模块的车载防盗系统设计 TC35i 资料 宾馆管理信息系统论文.doc 单片机-基于GSM短信模块的家庭防盗报警系统 VB+ACCESS基于CAN总线的灌溉控制系统设计 单片机-火灾自动报警系统设计 VB+ACCESS家庭理财投资管理系统 单片机-电子时钟 VB+ACCESS家庭理财系统 单片机-电子设计大赛点阵电子显示屏(A题) VB+SQL第三方采购系统 单片机-电信运营商收入保障系统设计与实现 VB+ACCESS通用数据采集系统 单片机-全遥控数字音量控制的D类功率放大器 单片机- 数控直流稳压电源完整论文 单片机-数字密码锁设计 单片机-数字抢答器(数字电路) 单片机-数字时钟 单片机-水箱单片机控制系统 vfp现代物流企业管理系统 单片机-自动加料机控制系统 VFP航班售票管理系统 基于51单片机下位机采集6路温度开发 VFP工资管理系统 单片机-门控自动照明电路 单片机-智能型充电器电源和显示的设计 MATLAB智能控制 用单片机实现温度远程显示 MATLAB车牌识别 单片机-用单片机控制直流电机 单片机-温度监控系统的设计 单片机-同步电机模型的MATLAB仿真 基于JAVA的聊天系统的设计与实现 单片机-智能家用电热水器控制器.rar JAVA EMAIL客户端.zip 单片机--音乐同步彩灯的设计.doc j2me打飞机游戏 单片机--数字锁相环频率合成器的设计.doc JAVA+SQL酒店管理系统 单片机--无线多路数据采集系统设计论文.doc JAVA宿舍管理系统.rar 金相试样切割机方案设计.doc Java网上五子棋游戏设计.rar JAVA五子棋.rar JAVA中国象棋对弈软件的设计.rar JBuilder网络版五子棋.rar Java物业管理系统.rar Flash MTV回到过去
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值