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

dee*_*eeJ 7 redis node.js

我想让Node.js进程运行,因为它正在检查Redis服务器是否有新的pop.

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

有人能指出我的方向吗?

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

gen*_*nry 14

你会想要使用阻止弹出:http://redis.io/commands/brpop

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

  • @ MattW-D我相信这里不存在堆栈问题,因为'递归'发生在回调中. (2认同)

小智 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");
Run Code Online (Sandbox Code Playgroud)

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

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