2015-12-31 2 views
1

Я использую Redis с Node.js.Redis pub/sub со списком

client = redis.createClient(); 
client.subscribe("[email protected]__:url_set"); 
client.on("message",function(channel, message) { 
    client.on('connect', function() { 
     client.lrange('url_list',0,-1,function(err3, reply3) { 
      console.log(reply3); 
     }); 
     client.smembers('url_set',function(err4, reply4) { 
      console.log(reply4); 
     }); 
    }); 
}); 

Здесь reply3 и reply4 являются undefined. Нужны ли lrange() и smembers() в паб-блоке «сообщение»?

ответ

0

Да, обычные команды не разрешены, когда клиент находится в режиме подписчика. Создайте другой клиент для регулярных команд.

var client2 = redis.createClient(); 

client2 использование для lrange() и smembers().

см-узел Redis doc:

Когда клиент выдает SUBSCRIBE или PSUBSCRIBE, что соединение переводится в режим "абонента". В этот момент действительны только команды, которые изменяют набор подписки. Когда набор подписки пуст, соединение возвращается в обычный режим.

Если вам нужно отправить регулярные команды Redis в режиме подписчика, просто откройте другое соединение.

+0

Будет ли я получать события в ключевом пространстве, если я использую другой клиент? –

+0

да, вы получите события клиенту, на которого вы подписались. Например: '' 'client''' в вашем коде получат события, потому что они подписаны. И вы можете использовать '' 'client2''' для других команд, таких как' '' lrange() '' ' –

Смежные вопросы