发布、订阅

发布 publish

描述: 将消息发布到频道

所需参数

  • channel: 要发布到的频道
  • message: 消息

例子

Redis::publish('chan-1', 'hello, world!');  // 发送消息
Redis::publish('chan-2', 'hello, world2!'); // 发送消息

订阅 subscribe

描述: 订阅频道。

所需参数

  • channels: 多个通道名称需要是一个数组
  • callback: 回调函数接收3个参数。
    • redis redis实例
    • chan 通道名称
    • msg 接受到的消息(mixed)

例子:

function f($redis, $chan, $msg) {
    switch($chan) {
        case 'chan-1':
            ...
            break;

        case 'chan-2':
            ...
            break;

        case 'chan-2':
            ...
            break;
    }
}
// 订阅 3 个 频道
Redis::subscribe(['chan-1', 'chan-2', 'chan-3'], 'f'); 

按匹配模式订阅频道 pSubscribe

使用 psubscribe 方法可以订阅通配符频道,可以用来在所有频道上获取所有消息。

参数

  • patterns 匹配规则数组
  • callback 接受到消息回调的闭包
    • redis redis 实例
    • pattern 匹配的规则
    • chan 通道名称
    • msg 接收到的消息(mixed)

例子:

Redis::psubscribe(['*'], function ($redis, $pattern, $chan, $msg) {
    echo "Pattern: $pattern\n";
    echo "Channel: $chan\n";
    echo "Payload: $msg\n";
});

Redis::psubscribe(['users.*'], function ($redis, $pattern, $chan, $msg) {
   echo "Pattern: $pattern\n";
   echo "Channel: $chan\n";
   echo "Payload: $msg\n";
});

发布订阅使用的 phpredis 原生的 可能过几秒有会断开 socket 连接断开, 在需要在开启发布订阅前 加


ini_set('default_socket_timeout', -1);

 // todo ...
Redis::psubscribe(['users.*'], function ($redis, $pattern, $chan, $msg) {
   echo "Pattern: $pattern\n";
   echo "Channel: $chan\n";
   echo "Payload: $msg\n";
});
/docs/2.x/zh-CN/redis/pub-sub.html
progress-bar