參數名:maxTotal
含義:資源池最大連接數 【默認值:8】
使用建議:需要考慮以下幾點
1.業務希望的Redis並發量
2.客戶端執行命令時間
3.Redis資源:例如應用個數(客戶端)* maxTotal 不能超過Redis服務端的最大連接數(config get maxclients)
4.資源開銷:例如雖然希望控制空閑連接,但是不希望因為連接池的頻繁釋放創建連接造成不必要的開銷。
舉例:
命令平均執行時間0.1ms = 0.001s
業務需要50000 QPS
maxTotal理論值 = 0.001 * 50000 = 50個。實際值要偏大一些。
參數名:maxIdle
含義:資源池允許最大的空閑連接數 【默認值:8】
使用建議:建議跟maxTotal設置的值一樣,這樣可以減少創建新連接的開銷
參數名:minIdle
含義:資源池確保最少空閑連接數 【默認值:0】
使用建議:建議第一次開啟的時候預熱(初始化一個值),減少第一次啟動后的新連接開銷
參數名:jmxEnabled
含義:是否開啟jmx監控,可用於監控資源使用狀態 【默認值:true】
使用建議:開啟
參數名:blockWhenExhausted
含義:當資源池用盡后,調用者是否要等待。只有當為true時,配置的maxWaitMillis參數才會生效 【默認值:true】
使用建議:建議先使用默認值,但這個也要看情況,如果並發量大,可以直接設置false,即每次請求資源時,如果連接資源不夠,馬上new個新的
參數名:maxWaitMillis
含義:當資源池連接用盡后,調用者最大等待時間(單位為毫秒) 【默認-1,表示永不超時】
使用建議:不建議使用默認值,再高並發環境下,獲取資源不能hand在一個沒有超時時間的地方,具體設置根據實際場景 如設置1000即為等待1秒。
參數名:testOnBorrow、testOnReturn
含義:這兩個參數是說,客戶端向連接池借用或歸還時,是否會在內部進行有效性檢測(ping),無效的資源將被移除 【默認值:false】
使用建議:建議false,在高並發場景下,因為這樣無形給每次增加了兩次ping操作,對QPS有影響,如果不是高並發環境,可以考慮開啟,或者自己來檢測。
無法從連接池中獲取連接(超時)
連接池中資源耗盡(最大連接maxTotal和最大空閑連接maxIdle設置不等)
解決思路:
1.慢查詢阻塞:池子連接都被hang住。
2.資源參數不合理:例如QPS高,池子小。
3.連接泄露(沒有close()):也就是沒有歸還連接,可以用client list、netstat觀察連接的一個增長情況,最重要的是try...catch...finally