Ⅰ 如何在 resin下配置資料庫連接池
這項技術能明顯提高對資料庫操作的性能。
資料庫連接池在初始化時將創建一定數量的資料庫連接放到連接池中,這些資料庫連接的數量是由最小資料庫連接數來設定的。無論這些資料庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數量。連接池的最大數據庫連接數量限定了這個連接池能佔有的最大連接數,當應用程序向連接池請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。
resin提供了一個良好的連接池來供開發人員來實現資料庫連接,具體配置如下:
在/conf/resin.conf中加入以下內容:
<database
Ⅱ mysql 鏁版嵁搴撶殑鏁版嵁搴撹繛鎺ユ睜鏄濡備綍璁捐★紵
MySQL鏁版嵁搴撹繛鎺ユ睜鏄涓縐嶆暟鎹搴撹繛鎺ョ$悊鎶鏈錛屽畠鍙浠ユ彁楂樺簲鐢ㄧ▼搴忕殑鎬ц兘鍜屽彲浼哥緝鎬с傝繛鎺ユ睜鐨勮捐$洰鏍囨槸鍑忓皯搴旂敤紼嬪簭涓庢暟鎹搴撲箣闂寸殑浜や簰嬈℃暟錛屼粠鑰屾彁楂樺簲鐢ㄧ▼搴忕殑鎬ц兘銆傝繛鎺ユ睜鐢變竴緇勯勫厛鍒涘緩鐨勬暟鎹搴撹繛鎺ョ粍鎴愶紝榪欎簺榪炴帴鍙浠ラ噸澶嶄嬌鐢錛岃屼笉鏄涓烘瘡涓璇鋒眰鍒涘緩涓涓鏂扮殑榪炴帴銆傚綋搴旂敤紼嬪簭闇瑕佽塊棶鏁版嵁搴撴椂錛屽畠鍙浠ヤ粠榪炴帴奼犱腑鑾峰彇涓涓絀洪棽榪炴帴錛岃屼笉鏄鍒涘緩涓涓鏂扮殑榪炴帴銆傚綋搴旂敤紼嬪簭瀹屾垚瀵規暟鎹搴撶殑璁塊棶鍚庯紝瀹冨皢閲婃斁璇ヨ繛鎺ュ苟灝嗗叾榪斿洖鍒拌繛鎺ユ睜涓銆
MySQL鏁版嵁搴撹繛鎺ユ睜閫氬父鐢變互涓嬮儴鍒嗙粍鎴愶細
1. 榪炴帴奼犵$悊鍣錛氱敤浜庣$悊榪炴帴奼狅紝鍖呮嫭鍒涘緩銆侀攢姣佸拰鍥炴敹榪炴帴銆
2. 榪炴帴奼犻厤緗錛氱敤浜庨厤緗榪炴帴奼犵殑灞炴э紝渚嬪傛渶澶ц繛鎺ユ暟銆佹渶灝忚繛鎺ユ暟銆佽秴鏃舵椂闂寸瓑銆
3. 榪炴帴奼犲疄鐜幫細鐢ㄤ簬瀹炵幇瀹為檯鐨勮繛鎺ョ$悊閫昏緫錛屽寘鎷鑾峰彇絀洪棽榪炴帴銆佸垎閰嶇┖闂茶繛鎺ョ瓑銆
鍦∕ySQL涓錛屽彲浠ヤ嬌鐢ㄧ涓夋柟搴撴潵瀹炵幇鏁版嵁搴撹繛鎺ユ睜錛屼緥濡侫pache Commons DBCP銆丆3P0銆丠ikariCP絳夈傝繖浜涘簱閮芥彁渚涗簡瀹屾暣鐨凙PI鍜屾枃妗o紝鍙浠ュ府鍔╂偍蹇閫熷湴瀹炵幇鍜岀$悊MySQL鏁版嵁搴撹繛鎺ユ睜銆
Ⅲ MySQL與Redis資料庫連接池介紹(圖示+源碼+代碼演示)
資料庫連接池(Connection pooling)是程序啟動時建立足夠的資料庫連接,並將這些連接組成一個連接池,由程序動態地對池中的連接進行申請,使用,釋放。
簡單的說:創建資料庫連接是一個很耗時的操作,也容易對資料庫造成安全隱患。所以,在程序初始化的時候,集中創建多個資料庫連接,並把他們集中管理,供程序使用,可以保證較快的資料庫讀寫速度,還更加安全可靠。
不使用資料庫連接池
如果不使用資料庫連接池,對於每一次SQL操作,都要走一遍下面完整的流程:
1.TCP建立連接的三次握手(客戶端與 MySQL伺服器的連接基於TCP協議)
2.MySQL認證的三次我收
3.真正的SQL執行
4.MySQL的關閉
5.TCP的四次握手關閉
可以看出來,為了執行一條SQL,需要進行大量的初始化與關閉操作
使用資料庫連接池
如果使用資料庫連接池,那麼會 事先申請(初始化)好 相關的資料庫連接,然後在之後的SQL操作中會復用這些資料庫連接,操作結束之後資料庫也不會斷開連接,而是將資料庫對象放回到資料庫連接池中
資源重用:由於資料庫連接得到重用,避免了頻繁的創建、釋放連接引起的性能開銷,在減少系統消耗的基礎上,另一方面也增進了系統運行環境的平穩性(減少內存碎片以及資料庫臨時進程/線程的數量)。
更快的系統響應速度:資料庫連接池在初始化過程中,往往已經創建了若干資料庫連接置於池中備用。 此時連接的初始化工作均已完成。對於業務請求處理而言,直接利用現有可用連接,避免了從資料庫連接初始化和釋放過程的開銷,從而縮減了系統整體響應時間。
統一的連接管理,避免資料庫連接泄露:在較為完備的資料庫連接池實現中,可根據預先的連接佔用超時設定,強制收回被佔用連接。從而避免了常規資料庫連接操作中可能出現的資源泄露。
如果說你的伺服器CPU是4核i7的,連接池大小應該為((4*2)+1)=9
相關視頻推薦
90分鍾搞懂資料庫連接池技術|linux後台開發
《tcp/ip詳解卷一》: 150行代碼拉開協議棧實現的篇章
學習地址:C/C++Linux伺服器開發/後台架構師【零聲教育】-學習視頻教程-騰訊課堂
需要C/C++ Linux伺服器架構師學習資料加qun 812855908 獲取(資料包括 C/C++,Linux,golang技術,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協程,DPDK,ffmpeg 等),免費分享
源碼下載
下載方式:https://github.com/dongyusheng/csdn-code/tree/master/db_pool(Github中下載)
db_pool目錄下有兩個目錄,mysql_pool目錄為MySQL連接池代碼,redis_pool為redis連接池代碼
下面介紹mysql_pool
CDBConn解析
概念: 代表一個數據連接對象實例
相關成員:
m_pDBPool:該資料庫連接對象所屬的資料庫連接池
構造函數: 綁定自己所屬於哪個資料庫連接池
Init()函數: 創建資料庫連接句柄
CDBPool解析
概念:代表一個資料庫連接池
相關成員:
Init()函數:常見指定數量的資料庫實例句柄,然後添加到m_free_list中,供後面使用
GetDBConn()函數: 用於從空閑隊列中返回可以使用的資料庫連接句柄
RelDBConn()函數: 程序使用完該資料庫句柄之後,將句柄放回到空閑隊列中
測試之前,將代碼中的資料庫地址、埠、賬號密碼等改為自己的(代碼中有好幾處)
進入MySQL, 創建mysql_pool_test資料庫
進入到mysql_pool目錄下, 創建一個build目錄並進入 :
然後輸入如下的命令進行編譯
之後就會在目錄下生成如下的可執行文件
輸入如下兩條命令進行測試: 可以看到不使用資料庫連接池,整個操作耗時4秒左右;使用連接池之後,整個操作耗時2秒左右,提升了一倍
源碼下載
下面介紹redis_pool
測試
進入到redis_pool目錄下, 創建一個build目錄並進入 :
然後輸入如下的命令進行編譯
之後就會在目錄下生成如下的可執行文件
輸入如下的命令進行測試: 可以看到不使用資料庫連接池,整個操作耗時182ms;使用連接池之後,整個操作耗時21ms,提升了很多
進入redis,可以看到我們新建的key:
Ⅳ java資料庫連接池配置的幾種方法
資料庫連接來池的主要操作如下:源
(1)建立資料庫連接池對象(伺服器啟動)。
(2)按照事先指定的參數創建初始數量的資料庫連接(即:空閑連接數)。
(3)對於一個資料庫訪問請求,直接從連接池中得到一個連接。如果資料庫連接池對象中沒有空閑的連接,且連接數沒有達到最大(即:最大活躍連接數),創建一個新的資料庫連接。
(4)存取資料庫。
(5)關閉資料庫,釋放所有資料庫連接(此時的關閉資料庫連接,並非真正關閉,而是將其放入空閑隊列中。如實際空閑連接數大於初始空閑連接數則釋放連接)。
(6)釋放資料庫連接池對象(伺服器停止、維護期間,釋放資料庫連接池對象,並釋放所有連接)。
Ⅳ Java資料庫連接池的幾種配置方法(以MySQL數
連接先建立一些連接,並且這些連接允許共享,因此這樣就節省了每次連接的時間開銷。Mysql資料庫為例,連接池在Tomcat中的配置與使用。
1、創建資料庫Student,表student
2、配置server.xml文件。Tomcat安裝目錄下conf中server.xml文件。
<GlobalNamingResources>
<Resource
name="jdbc/DBPool"
type="javax.sql.DataSource"
password=""
driverClassName="com.mysql.jdbc.Driver"
maxIdle="2"
maxWait="5000"
username="root"
url="jdbc:mysql://localhost:3306/student"
maxActive="3"
/>
</GlobalNamingResources>
name:指定連接池的名稱
type:指定連接池的類,他負責連接池的事務處理
url:指定要連接的資料庫
driverClassName:指定連接資料庫使用的驅動程序
username:資料庫用戶名
password:資料庫密碼
maxWait:指定最大建立連接等待時間,如果超過此時間將接到異常
maxIdle:指定連接池中連接的最大空閑數
maxActive:指定連接池最大連接數
3、配置web.xml文件。
<web-app>
<resource-ref>
<description>mysql資料庫連接池配置</description>
<res-ref-name>jdbc/DBPool</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
</web-app>
4、配置context.xml文件
與server.xml文件所在的位置相同。
<Context>
<ResourceLink
name="jdbc/DBPool"
type="javax.sql.DataSource"
global="jdbc/DBPool"
/>
</Context>
5、測試
DataSource pool = null;
Context env = null;
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try{
env = (Context)new InitialContext().lookup("java:comp/env");
//檢索指定的對象,返回此上下文的一個新實例
pool = (DataSource)env.lookup("jdbc/DBPool");
//獲得資料庫連接池
if(pool==null){out.printl("找不到指定的連接池!");}
con = pool.getConnection();
st = con.createStatement();
rs = st.executeQuery("select * from student");
}catch(Exception ex){out.printl(ne.toString());}