如何实时添加Redis中的对象?

时间:2013-03-24 19:30:44

标签: node.js redis

我希望运行一个Node.js进程,因为它正在检查Redis服务器是否有新的流行。

另一个进程是偶尔进行推送,Node进程将尝试弹出任何进入的进程。节点进程将继续运行。

有人能指出我的方向吗?

我试图弄清楚如何倾听这样的事件。当然,我可以弹出一次,但是如何让Node进程继续监听Redis服务器的任何添加?

3 个答案:

答案 0 :(得分:13)

您需要使用阻止弹出式广告:http://redis.io/commands/brpop

function waitForPush () {
  client.brpop(['list','otherlist',0], function (listName, item) {
    // do stuff
    waitForPush();
  });
}

答案 1 :(得分:11)

这似乎是pub / sub的一个很好的用例:http://redis.io/topics/pubsub

偶尔推送到Redis的Node.js进程也可以在每次推送时发布到通道。像这样:

var pushClient = redis.createClient();
//push something onto Redis
pushClient.publish("pubsub-channel", "Just pushed something onto Redis");

然后您的其他进程将订阅该频道。每次触发消息事件时,都会弹出刚刚推送的内容:

var client = redis.createClient();
client.subscribe("pubsub-channel");
client.on("message", function(channel, message){
//pop off new item
});

答案 2 :(得分:2)

如何使用process.nextTick(...)

修改递归函数版本
(9, '\x00\x01\x00\x00\x00\xff\xff\xff\xff\x01\x00\x00\x00\x00\x00\x00\x00\x0c\x02\x00\x00\x00ENetDeedPlotter, Version=5.6.1.0, Culture=neutral, PublicKeyToken=null\x0c\x03\x00\x00\x00QSystem.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\x05\x01\x00\x00\x00\x1eNet_Deed_Plotter.SerializeData!\x00\x00\x00\x0bLinesOfData\x0eNumberOfTracts\x0bSeditortext\x07SedLine\x06Stract\n')
(10, 'SNoteArray\x0bSNorthArrow\n')
(11, 'Slandscape\n')
(12, 'SPaperSize\x0cSPaperBounds\rSPrinterScale\x10SPrinterScaleStr\x16SAllTractsMouseOffsetN\x16SAllTractsMouseOffsetE\x11SAllTractsNOffset\x11SAllTractsEOffset\x0eSImageScroll_Y\x0eSImageScroll_X\x08SImage_Y\x08SImage_X\x0eSImageFilePath\n')
(13, 'SUpDateMap\x04Sttc\x03Stt\x03Stb\x03Sbo\x03Snb\n')
(14, 'STitleText\tSDateText\tSPOBLines\rSLabelCorners')
>>>