Redis的频道监听主要是通过其发布/订阅(publish/subscribe)机制实现的。在这个机制中,订阅者(listener)负责订阅频道(channel),而发送者(publisher)则负责向这些频道发送二进制字符串消息。每当有消息被发送至某个频道时,该频道的所有订阅者都会收到这条消息。
订阅者代码:
<?php
// 频道监听订阅
// 初始化redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('密码');
// 频道监听
$channel = 'test_user';
$channel2 = 'test_user2';
$redis->setOption(Redis::OPT_SERIALIZER, -1);
$redis->psubscribe([$channel, $channel2], 'callback'); // 可以订阅多个频道
// 回调函数,这里写处理逻辑
function callback($redis, $pattern, $channel, $message)
{
// callback为订阅事件后的回调函数,这里写业务处理逻辑
echo "接收到来自频道 {$channel} 的消息: {$message}".PHP_EOL;
}
发布者代码:
<?php
// 频道监听发布
// 初始化redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('long');
// 统一频道名
$channel = 'test_user';
$redis->setOption(Redis::OPT_SERIALIZER, -1);
// 模拟订单未支付超时
echo "请输入内容: ";
while(($input = fgets(STDIN))){
// 去除输入中的换行符
$msg = trim($input);
// echo "你输入了: " . $input . "\n";
$redis->publish($channel, $msg); // 实时
// 提示用户继续输入
echo "请输入内容: ";
}
可以多个频道实现简单聊天功能
将上面发布者代码复制一份, 修改频道名称 为test_user2
简单聊天功能效果如图

















