Visualforce 標準控制器(Standard Controller)
阿新 • • 發佈:2022-05-07
1. 池化技術?
2. 什麼是資料庫連線池?
3. 為什麼使用資料庫連線池?
4. 資料庫連線池執行機制
5.連線池和執行緒池的關係
6.連線池設計要點
7. 連線池的具體實現
8.連線池連線設定數量
1. 池化技術?
池化技術能夠減少資源物件的建立次數,提高程式的響應效能,特別是在高併發下這種提高更加明顯。 使用池化技術快取的資源物件有如下共同特點: 1. 物件建立時間長; 2. 物件建立需要大量資源; 3. 物件建立後可被重複使用 像常見的執行緒池、記憶體池、連線池、物件池都具有以上的共同特點。2. 什麼是資料庫連線池?
定義:資料庫連線池(Connection pooling)是程式啟動時建立足夠的資料庫連線,並將這些連線組成 一個連線池,由程式動態地對池中的連線進行申請,使用,釋放。 大白話:建立資料庫連線是一個很耗時的操作,也容易對資料庫造成安全隱患。所以,在程式初始化的 時候,集中建立多個數據庫連線,並把他們集中管理,供程式使用,可以保證較快的資料庫讀寫速度, 還更加安全可靠。 這裡講的資料庫,不單只是指Mysql,也同樣適用於Redis。3. 為什麼使用資料庫連線池?
3.1普通使用資料庫時,需要首先建立TCP連線,賬號、密碼認證建立資料庫連線,執行sql語句,關閉資料庫連線,關閉TCP連線。這個步驟浪費時間與資源,可以把建立資料庫的連線儲存在一個連線容器內,需要執行任務時從連線容器內取出一個連線,任務完成時歸還連線,就可以節省很多時間與資源。
優點:
- 降低了網路開銷
- 連線複用,優先減少了連線數
- 提升效能,避免頻繁的新建連線,新建連線的開銷比較大
- 沒有TIME_WAIT狀態的問題
缺點:
設計較為複雜
3.2 長連線和連線池的區別
- 長連線是一些驅動、驅動框架、ORM工具的特性,由驅動來保持連線控制代碼的開啟,一邊後續的資料庫操作可以重用連線,從而減少資料庫的連線開銷。
- 連線池是應用伺服器的元件,它可以通過引數來配置連線數,連線檢測、連線的生命週期等。
- 連線池內的連線,其實就是長連線。
4. 資料庫連線池執行機制
- 從連線池獲取或建立可用連線;
- 使用完畢之後,把連線返回給連線池;
- 在系統關閉前,斷開所有連線並釋放連線佔用的系統資源;
5.連線池和執行緒池的關係
執行緒池是主動操作,主動執行任務,當任務佇列不為空的時候從佇列取任務取執行。
連線池是被動操作(類似記憶體池),池的物件被任務獲取,執行完任務後歸還。
6 .連線池設計要點
使用連線池需要預先建立資料庫連線。
連線池設計思路:
- 連線到資料庫,設計到資料庫ip、埠、使用者名稱、密碼、資料庫名字等;
- 連線的操作,每個連線物件都是獨立的連線通道,它們是獨立的;
- 配置最小連線數和最大連線數。
- 配置一個佇列管理池的連線,比如list;
- 獲取連線物件;connection_wait,notify
- 歸還連線物件;
- 連線池的名字。
第一步:建構函式,賦值 pool_name,db_server_ip(mysql ip地址),db_server_port(mysql埠),username(mysql使用者名稱),password(mysql使用者密碼),db_name(mysql資料庫名稱),max_conn_cnt(最大連線數)
第二步:int init()初始化,建立最小數量連線,把連線插入到空閒佇列,建立一次來連線要經歷三次握手和連線資料庫的過程。
第三步: 請求獲取連線
第四步:歸還連線
第五步:釋放資源
6.2 mysql連線重連機制
設定啟用(當發現連線斷開時的)自動重連my_bool reconnect = true; mysql_options(m_mysql, MYSQL_OPT_RECONNECT, &reconnect); // 配合mysql_ping實現自動重連檢測連線是否正常
int STDCALL mysql_ping(MYSQL *mysql);
描述:
檢查與服務端的連線是否正常。連線斷開時,如果自動重新連線功能未被禁用,則嘗試重新連線服務
器。該函式可被客戶端用來檢測閒置許久以後,與服務端的連線是否關閉,如有需要,則重新連線。
返回值:
連線正常,返回0;如有錯誤發生,則返回非0值。返回非0值並不意味著伺服器本身關閉掉,也有可能
是網路原因導致網路不通。
6.3 redis重連機制
1. 使用之前檢測連線是否可用
2. 使用過程中出現連線異常則釋放異常
3. 下一次使用該連線的時候如果發現連線不可用則重新初始化
redis的重連機制設計和mysql有區別。
7. 連線池的具體實現
8.連線池連線設定數量
連線池的連線數量一般與執行緒的數量是相等的。
連線數 = ((核心數 * 2) + 有效磁碟數) 按照這個公式,即是說你的伺服器 CPU 是 4核 i7 的,那連線池連線數大小應該為 ((4*2)+1)=9 這裡只是一個經驗公式。還要和執行緒池數量以及具體業務結合在一起。搜尋
複製