使用 PHP 实现 Redis 订阅/发布实例

浏览1722

上篇文章中,已经可以使用Redis原生的命令实现消息发布、订阅模式,本节中尝试在PHP中实现相同的操作。

1、实现消息订阅脚本

新增sub.php脚本文件,代码如下:

<?php
// 使用redis订阅、发布示例
date_default_timezone_set("PRC");
header('Content-type:text/html;charset=utf-8');
// 避免在默认情况下1分钟后终止与redis服务器德连接
ini_set('default_scoket_timeout', -1);
// 实例化redis类,监听订阅信息
$redis=new redis();
$redis->connect('127.0.0.1',6379);
// 订阅名为task_queue的频道
$redis->subscribe(['task_queue'],function($redis,$chan,$msg){
	switch ($chan) {
		case 'task_queue':
			echo $msg."\t\n";  //在命令行中显示接收到的信息
			break;
		
		default:
			# code...
			break;
	}
});
?>

因为需要一直监听Redis中的频道动态,sub.php需要持续执行,所以不能使用浏览器访问,同时为了防止与 Redis连接超时,定义脚本的命令如下

//避免在默认的配置下1分钟后终止与 Redis服务器的连接

ini_set('default_socket_timeout,-1)

Redis扩展中的 subscribe方法传入了两个参数。第一个参数是需要订阅的频道名,可以是多个,例如数组类型:第二个参数是一个回调方法,其包含3个参数,分别是Redis

对象( $Redis)、频道名( Schan)和消息(Smsg)。在 subscribe()方法体内对不同频道进行筛分执行不同的工作,代码如下:

case 'task_queue'
//获取消息主体内容,然后执行相应的任务
break;

2、实现消息发布功能

新增pub.php脚本文件,用来给特定频道发布消息。sub.php脚本实现队列消费功能,而pub.php脚本则模拟实现队列操作。实现代码如下:

<?php
// 发布订阅消息
date_default_timezone_set("PRC");
header('Content-type:text/html;charset=utf-8');
$redis=new redis();
// 第一个参数为redis服务器ip,第二个为端口
$res=$redis->connect('127.0.0.1',6379);
// test为发布的频道名称,hello,word为发布的消息
$res=$redis->publish('task_queue',('当前时间为:'.date('Y-m-d H:i:s')));
if(!$res){
	echo "发布订阅失败!";
	die;
}
echo "发布订阅成功!";

相比消息订阅方法,publish()方法的使用较为简单,只需传入频道名称和消息合这两个参数即可:

$res=$tedis->publish(' task queue',('当前时间:',date('Y-m-d H:i:s')));

每次执行 pub.php脚本,就可以向 task_queue频道发送最新的时间信息,为了测试脚本是否正常,在命令行中执行以下命令:

php sub.php

随后在浏览器中访问 pub. php脚本文件,返回结果如下

发布订阅成功!

再执行sub.php脚本命令,显示结果如下:

php sub.php

当前时间为:2019-08-14 23:20:03

当前时间为:2019-08-14 23:20:04

当前时间为:2019-08-14 23:20:04 


  • 暂无任何回答