2017-03-10 21 views
0

我很难自动关闭Redis的客户端连接。这肯定是与redis包一个问题:如何杀死Redis上由Node打开的空闲客户端?

https://www.npmjs.com/package/redis

的Redis将保持连接活着,直到你关闭它们或超时,默认为无穷大,则达到。

我意识到了这一点:

how do I kill idle redis clients

即使阅读之前,所以我想通过这两个.conf文件,并通过命令行设置timeout配置,但没有一次成功。

实际上会发生什么很奇怪:

如果我跑了N秒后CLIENT LIST

  • 相同数量的空闲连接仍然存在
  • 客户端“空闲”信息来自重新启动0(例如,如果我设置了10秒的超时时间,11秒后idle信息为1)。
  • 地址变化。端口号会随着创建新连接而更改,以免丢失该客户端。
  • 客户端实际上连接到节点。这似乎是一个新的节点过程。如果我保持节点应用程序UP,连接不会死。如果我关闭应用程序所有由它创建的连接关闭。所以redis模块可能是'重新启动'连接。

关于我应该怎样强制“杀死”客户的任何想法?我知道我可以通过'quit()'来关闭客户端的连接,但是我必须保证在一段时间后它将摆脱任何未被应用程序关闭的闲置客户端。

+0

功能有[各种选项](https://github.com/NodeRedis/node_redis#options-object-properties)来配置客户端的行为时它的连接正在被服务器关闭(默认是重新连接,这就是你所看到的)。但是,为什么节点代码创建(我认为是)连接太多?为什么不只是一个连接并重用它?如果这不可能,为什么客户没有正确关闭连接? – robertklep

+0

@robertklep我同意,如果正确完成,不应该为每个请求打开一个新的客户端。代码是必需的,以查看你做错了什么。 – Darkrum

+0

嘿家伙。我想确保,即使应用程序未能关闭连接(现在正在执行此操作,在对代码进行了一些更改之后),旧的连接仍然不会永久存在。所以我想,不知何故,从应用程序中删除所有的责任 –

回答

0

为防止节点redis重新连接,我将密钥retry_strategy传递给createClient。

它必须是retuns false或抛出Error