Redis非常快。对于我的机器上的大多数部分,它与node.js中的本机Javascript语句或函数调用一样快。在node.js中编写常规Javascript代码很容易/轻松,因为不需要回调。我不明白为什么使用node.js在Redis中获取/设置键/值数据并不容易。
假设node.js和Redis在同一台机器上,是否有任何npm库允许使用阻塞调用与node.js上的Redis进行交互?我知道这必须是一个与V8连接的C / C ++库。
答案 0 :(得分:11)
我想您要确保已执行所有redis插入操作。为此,您可以使用MULTI命令插入密钥或执行其他操作。 https://github.com/mranney/node_redis模块将多对象中推送的命令排队,并相应地执行它们。
这样在exec调用结束时你只需要一个回调。
答案 1 :(得分:10)
对于那些试图习惯Node的编程模型的开发人员来说,这似乎是一个常见的熊陷阱。
这会发生这样的情况:你遇到了异步/回调模式不合适的情况,你想到你需要的是阻塞代码的一些方法,你要求Google / StackExchange在Node中阻塞,以及所有你得到的就是如何阻止阻塞。
他们是正确的 - 阻止,(“在做其他任何事情之前等待结果”),这不是你应该尝试在Node中做的事情。但我认为更有帮助的是要意识到99.9%的时间,你并不是真正想找到一种方法来阻止,你只是想找到一种方法来制作你的应用,“等待这个结果在继续这样做之前,“这不是完全相同的事情。”
尝试在Node中查看“流量控制”的概念,而不是“阻止”某些设计模式,这些设计模式可能更适合您尝试的操作。这是一个要检查的库列表:
https://github.com/joyent/node/wiki/modules#wiki-async-flow
我也是Node的新手,但我真的在挖异步:https://github.com/caolan/async
答案 2 :(得分:6)
阻止代码会产生 MASSIVE 瓶颈。
如果您使用阻止代码,您的服务器将变得不可思议慢。
请记住,节点是单线程的。因此,任何阻塞代码都会阻塞每个连接客户端的节点。
您自己的基准测试显示一个客户端足够快。你有1000个客户对它进行基准测试吗?如果你试试这个,你会看到为什么阻止代码坏
答案 3 :(得分:0)
虽然Redis速度很快,但它不是即时的...这就是为什么你必须使用回调,如果你想继续执行,确保你的价值在那里。
我认为可以(并且不建议你这样做)的唯一方法就是使用一个带有变量的回调函数,该变量是离开计时器的谓词。