Nodejs連線redis遇到的坑

2021-07-27 02:55:27 字數 1479 閱讀 2037

目前nodejs端使用redis模組對redis服務進行連線,**如下:

var

redisclient

=redis

.createclient

(config

.redisauth

);redisclient.on

("error"

,function

(err));

module

.exports

=redisclient

;

當redis發生error的時候,首先是quit了這個連線,然後再建立乙個新的連線。這樣寫出現了乙個問題,就是當發生error然後連線quit了之後,該連線並沒有像預想中的去重新建立新連線去連線,所以之後使用 redisclient 去set或者get的時候就會報錯,此時redis的操作無法再正常進行,除非重啟伺服器重置連線。當初這麼寫是為了保證redis鏈結在異常情況下保證能重連,現在看來這種方式是有問題的。

檢視官方文件,確定redis庫是有完善的自動重連機制的,所以以後這塊我們就不做處理了。

redisclient.on

("error"

,function

(err

));

但並不能保證就一定沒問題了,所以這裡準備加入redis錯誤告警,對redis異常進行監控。

redisclient.on

("error"

,function

(err));

varclient

=redis

.createclient(if

(options

.times_connected

>10)

// reconnect after

return

math

.max

(options

.attempt

*100

,3000);}

});

在redisclient初始化時,加入 retry_strategy 配置, 對連線的異常進行處理。

此方法如果返回 數字 型別比如 1000, 則該連線 會在 1秒後重新連線。如果返回非數字型別或者是 error型別,則中斷重連!!(所以必須返回數字)。

這裡還有乙個值得注意地方,當redis斷開連線或者連不上的時候,會丟擲乙個異常,如果nodejs程式沒有顯示捕獲這個異常進行處理,那麼nodejs程序就會退出,所以需要如下類似的**才能保證redis斷開後重連。

function

uncaughtexceptionhandler

(err

)else

}process.on

('uncaughtexception'

,uncaughtexceptionhandler

);

nodejs連線redis學習

1 安裝 開啟乙個 cmd視窗 使用cd命令切換目錄到 c redis 執行 redis server.exe redis.windows.conf 這時候另啟乙個cmd視窗,原來的不要關閉,不然就無法訪問服務端了。切換到redis目錄下執行 redis cli.exe h 127.0.0.1 p ...

nodejs連線sqlserver遇到的問題

首先,我用了mssqlheper模組,但是死活連不上資料庫,於是放棄,選擇了mssql模組。如下 var mssql require mssql var db var config server sql database uid pwd options pool db.sql function sq...

nodejs連線redis資料庫的簡單封裝

因專案用到而寫,先摘錄下來,以備參考 const fs require fs const path require path const redis require redis const basepath path.resolve 注意 如果redis server與nodejs客戶端都在本地,下...