0

Redis 非常快。大多数情况下,在我的机器上,它与 node.js 中的原生 Javascript 语句或函数调用一样快。在 node.js 中编写常规 Javascript 代码很容易/无痛,因为不需要回调。我不明白为什么使用 node.js 在 Redis 中获取/设置键/值数据不应该那么容易。

假设 node.js 和 Redis 在同一台机器上,是否有任何 npm 库允许使用阻塞调用与 node.js 上的 Redis 交互?我知道这必须是一个与 V8 接口的 C/C++ 库。

4

4 回答 4

11

我想您想确保您的所有 redis 插入操作都已执行。为此,您可以使用 MULTI 命令插入键或执行其他操作。https://github.com/mranney/node_redis模块将多对象推送的命令排队,并相应地执行它们。

这样你只需要一个回调,在 exec 调用结束时。

于 2011-05-23T23:17:45.307 回答
10

对于试图习惯 Node 事件编程模型的开发人员来说,这似乎是一个常见的陷阱。

发生的事情是这样的:你遇到了异步/回调模式不适合的情况,你认为你需要的是某种方法来执行阻塞代码,你向 Google/StackExchange 询问 Node 中的阻塞,你得到的只是是对阻塞有多糟糕的警告。

他们是对的——阻塞,(“在做任何其他事情之前等待这个结果”),不是你应该在 Node.js 中尝试做的事情。但我认为更有帮助的是认识到 99.9% 的时间,你并不是真的在寻找一种方法来做阻塞,你只是在寻找一种方法来制作你的应用程序,“等待结果在继续这样做之前,”这是不完全相同的事情。

尝试在 Node 中研究“流控制”的概念,而不是“阻塞”一些可能更适合您尝试做的设计模式的设计模式。以下是要查看的库列表:

https://github.com/joyent/node/wiki/modules#wiki-async-flow

我也是 Node 新手,但我真的很喜欢异步:https ://github.com/caolan/async

于 2012-06-23T14:51:45.587 回答
7

阻塞代码会造成巨大的瓶颈

如果您使用阻塞代码,您的服务器将变得非常慢。

请记住,节点是单线程的。因此,任何阻塞代码都会为每个连接的客户端阻塞节点。

您自己的基准测试表明它对于一个客户来说已经足够快了。您是否对 1000 个客户进行了基准测试?如果你试试这个,你会明白为什么阻塞代码不好

于 2011-05-23T15:14:53.063 回答
0

虽然 Redis 很快,但它不是即时的……这就是为什么如果你想继续执行以确保你的值在那里,你必须使用回调。

我认为您可以(并且不建议您这样做)实现此目的的唯一方法是使用带有变量的回调,该变量是离开计时器的谓词。

于 2011-05-23T15:14:04.147 回答