Node-redis: unref(),quit()和end()之间的区别

创建于 2015-02-11  ·  6评论  ·  资料来源: NodeRedis/node-redis

就像标题所示,即使阅读了文档,我也不清楚unref()quit()end()之间的区别。

  • 我应该使用哪一个,在哪种用例中?

end()似乎在不等待所有套接字关闭的情况下关闭连接。
unref()似乎在等待所有命令结束。
quit()似乎类似于unref()

  • 由于unref()没有超时,因此可以保证结束还是应该设置超时?
  • 我无条件调用了end事件吗?
question

最有用的评论

end()设计用于现在要终止应用程序的地方,例如uncaughtException处理程序,并且不要期待或不想等待(可能有)您可能发送的命令的答复还没有从Redis回来的。

quit()设计用于完成此连接并希望将其关闭的情况,但允许未完成的活动完成。 在大多数情况下,如果您尝试终止连接,请使用quit()

unref()并非旨在与这些选项竞争,而是仅在剩余的唯一异步对象是Redis客户端的情况下允许您的应用程序退出。 在执行批处理查询或连接到Redis的测试的某种脚本中,通常会出现这种情况。 它的行为与此处的unref http://nodejs.org/api/net.html#net_server_unref

所有6条评论

end()设计用于现在要终止应用程序的地方,例如uncaughtException处理程序,并且不要期待或不想等待(可能有)您可能发送的命令的答复还没有从Redis回来的。

quit()设计用于完成此连接并希望将其关闭的情况,但允许未完成的活动完成。 在大多数情况下,如果您尝试终止连接,请使用quit()

unref()并非旨在与这些选项竞争,而是仅在剩余的唯一异步对象是Redis客户端的情况下允许您的应用程序退出。 在执行批处理查询或连接到Redis的测试的某种脚本中,通常会出现这种情况。 它的行为与此处的unref http://nodejs.org/api/net.html#net_server_unref

然后,仅当您调用quit()时,才会发出end事件。 不知道为什么没有研究。

如果您不打电话退出,那会发生什么。

@techsin如果您从不关闭Redis连接,则您的节点应用程序将坐下来,并等待永远连接到Redis服务器。

如果应用程序已关闭但redis服务器仍在运行该怎么办。 这会使redis服务器保留引用吗? 那会有点内存泄漏

抱歉,我第一次不清楚

不会,如果应用程序关闭,它将终止客户端连接,而Redis服务器将在其端终止引用,因此不会发生内存泄漏。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

jackycchen picture jackycchen  ·  4评论

aletorrado picture aletorrado  ·  6评论

dotSlashLu picture dotSlashLu  ·  5评论

abhaygarg picture abhaygarg  ·  5评论

betimer picture betimer  ·  5评论