1. 程式人生 > >使用 Redis 連線池的原因

使用 Redis 連線池的原因

總結:

Redis 是基於記憶體的資料庫,使用之前需要建立連線,建立斷開連線需要消耗大量的時間。

使用連線池可以實現在客戶端建立多個連線,需要的時候從連線池拿過來,用完了再放回去。這樣就節省了建立、斷開連線所消耗的時間。

Jedis resource = jedisPool.getResource();

這段程式碼返回的是一個 Redis 例項多個連線中的一個。

轉載內容:

為什麼使用連線池?

首先Redis也是一種資料庫,它基於C/S模式,因此如果需要使用必須建立連線,稍微熟悉網路的人應該都清楚地知道為什麼需要建立連線,C/S模式本身就是一種遠端通訊的互動模式,因此Redis伺服器可以單獨作為一個數據庫伺服器來獨立存在。假設Redis伺服器與客戶端分處在異地,雖然基於記憶體的Redis資料庫

有著超高的效能,但是底層的網路通訊卻佔用了一次資料請求的大量時間,因為每次資料互動都需要先建立連線,假設一次資料互動總共用時30ms,超高效能的Redis資料庫處理資料所花的時間可能不到1ms,也即是說前期的連線佔用了29ms,連線池則可以實現在客戶端建立多個連結並且不釋放,當需要使用連線的時候通過一定的演算法獲取已經建立的連線,使用完了以後則還給連線池,這就免去了資料庫連線所佔用的時間。

通過連線池獲取的Jedis到底是個什麼東西?

這是從連線池中獲取Jedis連線例項的程式碼:Jedis resource = jedisPool.getResource(); 初次見到的時候對此我有誤解,最初的理解是Jedis例項就是一個“資料庫”連線(這裡強調的是資料庫而不是連線),那麼多個Jedis豈不是需要多個數據庫,然而鍵值對不都是放在一個數據庫當中的麼,顯然這個邏輯是不成立的。後期的正確理解:這裡的連線池跟Hibernate中的C3P0類似,針對同“一個”資料庫可以建立多個連線,Jedis從JedisPool中獲取的僅僅是一個連線

,至於多個連線到達單程序單執行緒的Redis之後怎麼處理則是另外一回事(採用多路IO複用)。

參考資料: