node.js - Redis key 可用时立即响应 Node 客户端

标签 node.js redis

在 Node 上,我试图在一些数据可用时立即向客户端发送响应,如果数据在分配的期限内不可用,则超时并返回 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 时读取 key 。

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

我的问题的第二部分:我真的不必使用 Redis。我只是在寻找任何方式在“事件发生”(在最抽象的意义上)时响应客户端。我愿意接受有关替代方案的建议。

最佳答案

redis协议(protocol)一般是同步的,所以redis Node 客户端将请求排队,串行执行。尝试使用不同的 redis 连接,您应该会得到预期的结果。

关于node.js - Redis key 可用时立即响应 Node 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23184456/

相关文章:

php - 解决Redis缓存偏移处的php反序列化错误

database - 如何将 redis 数据库从一台服务器移动到另一台服务器?

docker - 在 Docker 文件中运行命令

redis - 从redis中的集合A中删除两组A和B的交集

javascript - 递归:最少的步骤

node.js - 连续本地存储上下文在异步 waterfall 中丢失

node.js - 由于node-libcurl,命令 npm install 失败

c# - StackExchange.Redis 与 Azure Redis 速度慢得无法使用或引发超时错误

javascript - q then 与 2 个函数和 then 后跟 catch 之间的区别

javascript - Nodejs 表达从回调到对象的赋值