Redis連接池的簡單設計與實現

連接池屬於一種池化技術,在現在高併發場景下用的很多,其作用如下。

1. 與Redis服務器是TCP管道連接。TCP的創建需要三次握手,如果使用連接池技術,不用每次都是創建TCP連接,避免了耗時的三次握手操作。而且在非池化的情況下,每次的TCP銷燬要四次揮手,以及java對象的GC,都需要時間與性能消耗。

2. 資源分配。如果不適用池化技術,在多臺機器訪問同一個Redis服務器的情況下,如果每臺機器與Redis服務器建立起的連接總數沒有限制,那麼Redis服務器就會有負荷過大的情況,性能下降。如果使用連接池技術,在每臺機器上都限定了總的連接數,如果超了就等待。這樣通過連接池更好的分配資源的利用。

 

 

用什麼來存放Redis連接?

Array中頻繁的增加刪除操作性能很差,所以元素都需要位移。

Set, 可以但是不是最合適的, 因爲是無序的, 可能存在一個連接長時間不被使用的情況。

List, 本質也是數組實現。

Queue, 先進先出, 存在優先級, 不會造成一個連接長時間不被使用的情況

設計思路就是我們使用隊列來管理創建的Redis連接,一個是活動隊列來存儲正在被使用的連接,一個是空閒隊列來存儲可用的連接。如果沒有達到最大可用連接數目的時候,就新創建一個給用戶使用,並且放到活動連接隊列中。當一個線程釋放連接的時候,則從活動連接中取出,然後放到可用連接中。

 

 

發佈了212 篇原創文章 · 獲贊 411 · 訪問量 195萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章