本文介紹基于Java語言的Redis用戶端——Jedis的使用,包括Jedis簡介、擷取Jedis、Jedis直連、Jedis連接配接池以及二者的對比的選擇。
Jedis 是 Redis 官方首選的基于Java語言的用戶端開發包。Jedis功能強大,提供了完整Redis指令,與 Redis 2.8.x, 3.x.x及以上版本完全相容。而且使用簡單友善,絕對是Java語言的首選用戶端。
擷取Jedis可以在 http://github.com/xetorthio/jedis/releases下載下傳最新的版本;或者引入Maven依賴:
Jedis直連需要生成Jedis對象,這個對象負責和指定Redis節點進行通信。
然後就可以進行基本操作:
string
hash
list
set
zset
什麼是連接配接池?舉個類比,線程池是把線程放到便于統一管理的容器裡面,那麼連接配接池就是把連接配接放到一個容器裡面,友善連接配接的管理和使用,達到節省系統資源開銷和時間的效果。
如果沒有連接配接池,在實際應用開發中,每一次Jedis請求都必須經曆生成Jedis對象、Jedis執行指令、Jedis傳回執行結果和關閉Jedis連接配接等步驟,而建立Jedis對象,然後建立連接配接并打開資料庫是一件既消耗資源又費時的工作,如果頻繁發生這種資料庫操作,系統的性能必然會急劇下降,甚至會導緻系統崩潰。如果運用池化技術,将連接配接作為對象存儲在一個容器中(連接配接池),一旦連接配接池建立後,這些連接配接是共享的,極大地節省系統資源和時間,這就是Jedis連接配接池。如果之前已經了解過線程池,我想這兒看着會相當輕松寫意。
Jedis連接配接池使用主要有以下幾個步驟:建立連接配接池池、向連接配接池借Jedis對象、Jedis執行指令、傳回執行結果、歸還Jedis對象給連接配接池。具體代碼如下:
建立Jedis連接配接池并初始化:
可以看到,JedisPool大部配置設定置都在GenericObjectPoolConfig中完成的,GenericObjectPoolConfig參數說明如下表:
<col>
參數
參數說明
maxTotal
最大連接配接數,預設8個。
maxIdle
最大空閑連接配接數, 預設8個。
minIdle
最小空閑連接配接數,預設0個。
maxWaitMillis
當borrow(引入)一個jedis執行個體時,最大的等待時間,如果超過等待時間,則直接抛出JedisConnectionException。
testOnBorrow
在borrow一個jedis執行個體時,是否提前檢查連接配接可用性(ping())操作;如果為true,則得到的jedis執行個體均是可用的。預設為false。
blockWhenExhausted
連接配接耗盡時是否阻塞, false報異常,ture阻塞直到逾時, 預設true。
testOnReturn
在return一個jedis執行個體時,是否檢查連接配接可用性(ping()),預設為false。
testWhileIdle
如果為true,表示有一個idle object evitor線程對idle object進行掃描,如果validate失敗,此object會被從pool中drop掉。
這一項隻有在timeBetweenEvictionRunsMillis大于0時才有意義。
minEvictableIdleTimeMillis
表示一個對象至少停留在idle狀态的最短時間,然後才能被idle object evitor掃描并驅逐。這一項隻有在timeBetweenEvictionRunsMillis大于0時才有意義。
JedisPoolConfig中預設設定為60000。
timeBetweenEvictionRunsMillis
表示idle object evitor兩次掃描之間要sleep的毫秒數,預設設定為30000。
建立和初始化Jedis連接配接池以後,可以從Jedis連接配接池中擷取Jedis對象,進而進行操作:
Jedis直連和使用Jedis連接配接池各有所長,可以根據生産環境的需要因地制宜。
如果是少量的連接配接,并且每次連接配接時間較長,适合使用Jedis直連的方式。
如果是較為頻繁的連接配接則使用Jedis連接配接池。
優點
缺點
直連
簡單友善
用于少量長期連接配接的場景
每次建立/關閉TCP開銷較大
資源無法控制,存在連接配接洩漏的可能
Jedis對象線程不安全
連接配接池
Jedis預先生成,降低開銷使用
連接配接池的形式保護和控制資源的使用
相對于直連,使用相對麻煩,尤其在資源的管理上需要很多參數來保證,一旦規劃不合理也會出現問題
由于部落客也是在攀登的路上,文中可能存在不當之處,歡迎各位多指教! 如果文章對您有用,那麼請點個”推薦“,以資鼓勵!