如何使用redis发布/订阅

use*_*624 5 publish-subscribe redis node.js

目前我使用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) );
    });
}
Run Code Online (Sandbox Code Playgroud)

既然我想听加入和脱离事件,我的问题是我应该使用两个redisclient来听这两个事件,比如

   redisClient1.psubscribe('room/*/user/*/join');
   redisClient2.psubscribe('room/*/user/*/disjoin');
Run Code Online (Sandbox Code Playgroud)

或者只使用一个redisclient来监听和分离回调中的逻辑

   redisClient2.psubscribe('room/*/user/*');
Run Code Online (Sandbox Code Playgroud)

我知道这两种方式是可能的,但我不知道现实中人们如何使用它们,在哪种情况下呢?

Tam*_*ege 10

您可以安全地重复使用相同的Redis连接来订阅多个通道,但不能使用相同的连接来执行其他(非订阅相关的)任务.在Redis的文件中指出:

一旦客户端进入订阅状态,除了额外的SUBSCRIBE,PSUBSCRIBE,UNSUBSCRIBE和PUNSUBSCRIBE命令之外,它不应该发出任何其他命令.

我总是在Node中使用一个Redis连接来收听订阅的频道.