Redis 发布订阅

Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

操作方法

方法名称 参数 说明 备注
pSubscribe $callback, $pattern, ...$patterns 订阅一个或多个符合给定模式的频道。 $callback是回调函数
pubSub $subCommand, ...$arguments 查看订阅与发布系统状态。
publish $channel, $message 将信息发送到指定的频道。
pUnSubscribe $pattern, ...$patterns 退订所有给定模式的频道。
subscribe $callback, $channel, ...$channels 订阅给定的一个或多个频道的信息。
unsubscribe $channel, ...$channels 指退订给定的频道。
setSubscribeStop bool $subscribeStop 设置是否退出订阅 当你回调函数想退出时,调用这个命令
isSubscribeStop 查看当前订阅状态

基本使用


defined("REDIS_HOST") ?: define('REDIS_HOST', '127.0.0.1');
defined("REDIS_PORT") ?: define('REDIS_PORT', 6379);
defined("REDIS_AUTH") ?: define('REDIS_AUTH', 'easyswoole');
go(function () {
    $redis = new \EasySwoole\Redis\Redis(new \EasySwoole\Redis\Config\RedisConfig([
        'host'      => '127.0.0.1',
        'port'      => '6379',
        'auth'      => 'easyswoole',
        'serialize' => \EasySwoole\Redis\Config\RedisConfig::SERIALIZE_NONE
    ]));;

    //新开协程进行订阅
    go(function () {
        $redis = new \EasySwoole\Redis\Redis(new \EasySwoole\Redis\Config\RedisConfig([
            'host' => REDIS_HOST,
            'port' => REDIS_PORT,
            'auth' => REDIS_AUTH
        ]));
        $redis->pSubscribe(function (\EasySwoole\Redis\Redis $redis, $pattern, $str) {
            var_dump($pattern,$str);
            $data = $redis->unsubscribe('test');
            var_dump($data);
            $redis->setSubscribeStop(true);
        }, 'test', 'test1', 'test2');
    });

    //新开协程进行订阅
    go(function () {
        $redis = new \EasySwoole\Redis\Redis(new \EasySwoole\Redis\Config\RedisConfig([
            'host' => REDIS_HOST,
            'port' => REDIS_PORT,
            'auth' => REDIS_AUTH
        ]));
        $redis->subscribe(function (\EasySwoole\Redis\Redis $redis, $pattern, $str) {
            var_dump($pattern,$str);
            $data = $redis->unsubscribe('test');
            var_dump($data);
            $redis->setSubscribeStop(true);
        }, 'test', 'test1', 'test2');
    });

    $data = $redis->pubSub('CHANNELS');
    var_dump($data);
    \Swoole\Coroutine::sleep(1);

    $data = $redis->publish('test2', 'test');
    var_dump($data);

    $data = $redis->pUnSubscribe('test');
    var_dump($data);

});