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


简单聊天功能效果如图

redis频道监听的使用示例, 简单聊天功能_频道监听