Redis密钥可用时立即响应节点客户端

时间:2014-04-20 15:53:59

标签: node.js redis

在节点上,我尝试在一些数据可用时立即向客户端发送响应,并且如果数据在指定的时间段内没有变得可用,则超时并返回404。数据通过另一个客户端请求进入,该请求可能在请求等待数据之前或之后发生。

我目前的尝试是使用Redis并在数据进入时执行RPUSH并执行BLPOP以等待数据。它没有像我期望的那样表现。

使用redis~0.10.1,我的代码看起来像这样:

等待方:

redisClient.blpop(key, 10, function (err, value) {
    if (!err && value) {
        res.send(value);
    } else {
        res.send(404);
    }
});

设置方:

redisClient.rpush(key, 'something');
redisClient.expire(key, 30);

res.end();

我的期望是在进行RPUSH调用后立即调用BLPOP回调。但是,BLPOP超时,我只能在随后的请求中读取密钥+调用BLPOP。

我的问题的第一部分是关于将我的期望与节点上RPUSH / BLPOP的实际预期行为保持一致。

我的问题的第二部分:我真的不必使用Redis。我正在寻找任何方式在发生"事件时回复客户端" (在最抽象的意义上)。我愿意接受替代方案的建议。

1 个答案:

答案 0 :(得分:1)

redis协议通常是同步的,因此redis节点客户端将请求排队并按顺序执行。尝试使用不同的redis连接,你应该得到预期的结果。