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

2019-08-15   阅读:3220   类型:后端   分类:Redis    标签: Redis

上篇文章中,已经可以使用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

腾讯云11.11上云拼团Go,2核2G3M云服务器 28元/年

‘简忆博客’微信公众号 扫码关注‘简忆博客’微信公众号,获取最新文章动态
转载:请说明文章出处“来源简忆博客”。http://www.tpxhm.com/adetail/184.html

×
觉得文章有用就打赏一下文章作者
微信扫一扫打赏 微信扫一扫打赏
支付宝扫一扫打赏 支付宝扫一扫打赏

文章评论(0)

登录
简忆博客壁纸一
简忆博客壁纸二
简忆博客壁纸三
简忆博客壁纸四
简忆博客壁纸五
简忆博客壁纸六
简忆博客壁纸七
简忆博客壁纸八
头像

简忆博客
勤于学习,乐于分享

置顶推荐

打赏本站

如果你觉得本站很棒,可以通过扫码支付打赏哦!
微信扫码:你说多少就多少~
微信扫码
支付宝扫码:你说多少就多少~
支付宝扫码
×