如何使用Redis的发布/订阅功能?

6

目前我正在使用node.js和redis构建一个应用程序,我使用redis的原因是因为它具有发布/订阅功能。该应用程序的简单作用是在用户进入或离开房间时通知管理员。

function publishMsg( channel , mssage){
    redisClient.publish(channel,JSON.stringify());
}

publishMsg('room/1/user/b',{'room':1,'user':'b'});
publishMsg('room/1/user/c',{'room':1,'user':'c'});
publishMsg('room/2/user/b',{'room':2,'user':'b'});
publishMsg('room/2/user/c',{'room':2,'user':'c'});

function subscribe(pattern){
    redisClient.psubscribe(pattern);
    redisClient.on('pmessage', function(pattern, channel, message){     
        console.log('on publish / subscribe   ',  pattern+"   "+channel+"    "+message+"   "+ JSON.parse( message) );
    });
}

因为我想监听加入和离开事件,所以我的问题是,是否应该使用两个 Redis 客户端来监听这两个事件,比如:

   redisClient1.psubscribe('room/*/user/*/join');
   redisClient2.psubscribe('room/*/user/*/disjoin');

或者只使用一个redis客户端来监听并在回调函数内分离逻辑。
   redisClient2.psubscribe('room/*/user/*');

我知道这两种方法都是可行的,但我不知道在现实中人们如何使用它们,在什么情况下?
1个回答

11
您可以安全地重用相同的 Redis 连接来订阅多个频道,但是您不能使用同一个连接执行其他(非订阅相关)任务。Redis 文档说明如下:(订阅命令)

一旦客户端进入订阅状态,就不应该发出任何其他命令,除了附加的SUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE和PUNSUBSCRIBE命令。

我总是在Node中使用单个Redis连接来监听已订阅的频道。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接