參數名:maxTotal併發
含義:資源池最大鏈接數 【默認值:8】高併發
使用建議:須要考慮如下幾點spa
1.業務但願的Redis併發量資源
2.客戶端執行命令時間get
3.Redis資源:例如應用個數(客戶端)* maxTotal 不能超過Redis服務端的最大鏈接數(config get maxclients)it
4.資源開銷:例如雖然但願控制空閒鏈接,可是不但願由於鏈接池的頻繁釋放建立鏈接形成沒必要要的開銷。test
舉例:監控
命令平均執行時間0.1ms = 0.001scli
業務須要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