走在我們的redis的配置中,我們已經設置超時時間:7秒Redis的連接從接近事件
在node_redis我們處理Redis的連接準備和結束事件作爲
client.on("ready", function() {
logger.info("Connection Successfully Established to ", this.host, this.port);
}
client.on("end", function() {
logger.fatal("Connection Terminated to ", this.host, this.port);
}
樣品日誌
[2012-07-11 08:21:29.545] [致命]生產 - 連接終止 結束於'xxx9''6399'
[2012-07-11 08:21:29.803] [INFO]生產 - 連接成功建立'xxx9「6399」
但在某些情況下(最有可能的Redis正在關閉不通知客戶端的連接),我們看到了越來越command queue堆積和請求正在太多時間才能得到響應[直到node-redis客戶端能夠感知關閉事件的時間]。在所有這些情況下,命令回叫將返回此錯誤Redis connection gone from close event
。即使在等待之後。看起來好像這不是問題,因爲通常的結束事件沒有被觸發。
問題似乎與此類似 - http://code.google.com/p/redis/issues/detail?id=368
這是一個已知的東西在Redis的發生?
有沒有一種方法可以指定執行命令[發送和接收回復]不應該超過閾值,並在這種情況下回復錯誤,而不是讓客戶端停滯?
或者是否有其他方式在socket_timeout等情況下觸發close事件?
或者我們應該從我們的redis端檢查什麼?我們在debug
級別監視了我們的redis日誌,並且我們發現沒有任何與此問題相關的有用內容
當我們在調試模式下運行node-redis時,我們清楚地看到客戶端被阻塞,請求堆積在命令中隊列。我們在函數內記錄了why and queue length。我們保持禁用offline_queuing。
樣本記錄
Redis的連接從關閉事件了。 離線隊列0 命令隊列失敗的請求的8
響應時間:30388個MS [此變化按照在命令隊列的等待。第一個排隊的人有下列他較少]
平常Resonse時間最大響應時間和那些:1毫秒
PS:我們已經在node_redis提起issue太
任何反饋?你沒有標記正確的答案 – oconnecp 2014-01-08 09:22:42