2017-03-10 56 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