如何使用redis发布/订阅

目前我正在使用node.js和redis来构build一个应用程序,我使用redis的原因是由于发布/订阅function。 该应用程序只是简单地通知pipe理员,当用户进入用户或室外。

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) ); }); } 

因为我想听join和分离事件,我的问题是我应该使用两个redisclient来听这两个事件,如

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

或者只使用一个redisclient来监听和分离callback内部的逻辑

  redisClient2.psubscribe('room/*/user/*'); 

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

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

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

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