本文目錄一覽:
- 1、MySQL與Redis數據庫連接池介紹(圖示+源碼+代碼演示)
- 2、怎麼用druid連接池連接mysql
- 3、mysql 連接池配置有哪些方式
- 4、MySql數據庫連接池如何配置
- 5、tomcat怎麼連接mysql
- 6、Servlet JDBC中用數據源,連接池連接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 等),免費分享
源碼下載
下載方式:(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:
怎麼用druid連接池連接mysql
現在常用的開源數據庫連接池主要有c3p0、dbcp、proxool三種,其中:
Spring 推薦使用dbcp;
Hibernate 推薦使用c3p0和proxool;
1、 DBCP:apache
DBCP(DataBase connection pool)數據庫連接池。是apache上的一個 java連接池項目,也是 tomcat使用的連接池組件。單獨使用dbcp需要3個包:common-dbcp.jar,common-pool.jar,common-collections.jar由於建立數據庫連接是一個非常耗時耗資源的行為,所以通過連接池預先同數據庫建立一些連接,放在內存中,應用程序需要建立數據庫連接時直接到連接池中申請一個就行,用完後再放回去。dbcp沒有自動的去回收空閑連接的功能。
2、 C3P0:
C3P0是一個開源的jdbc連接池,它實現了數據源和jndi綁定,支持jdbc3規範和jdbc2的標準擴展。c3p0是異步操作的,緩慢的jdbc操作通過幫助進程完成。擴展這些操作可以有效的提升性能。目前使用它的開源項目有Hibernate,Spring等。c3p0有自動回收空閑連接功能。
3、 Proxool:Sourceforge
Proxool是一種Java數據庫連接池技術。是sourceforge下的一個開源項目,這個項目提供一個健壯、易用的連接池,最為關鍵的是這個連接池提供監控的功能,方便易用,便於發現連接泄漏的情況。
對比:
1 相同時間內同等量的線程數和循環次數下:通過對三個連接池的三個標誌性性能測試參數(Average,median,90%Line)進行比較發現:性能dbcp=c3p0proxool;
2 不同情況下的同一數據庫連接池測試:通過觀察 Average,median,90%Line三個參數發
現三個連接池的穩定性(三種連接池的三個測試參數的變化情況)依次:穩定性dbcp=c3p0proxool。
結論:
通過對三種數據庫連接池的性能測試發現,proxool和 c3p0能夠更好的支持高並發,但是在穩定性方面略遜於 dpcp;
mysql 連接池配置有哪些方式
數據庫連接池的主要操作如下: (1)建立數據庫連接池對象(服務器啟動)。 (2)按照事先指定的參數創建初始數量的數據庫連接(即:空閑連接數)。 (3)對於一個數據庫訪問請求,直接從連接池中得到一個連接。如果數據庫連接池對象中沒有空閑
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
descriptionmysql數據庫連接池配置/description
res-ref-namejdbc/DBPool/res-ref-name
res-typejavax.sql.DataSource/res-type
res-authContainer/res-auth
res-sharing-scopeShareable/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());}
tomcat怎麼連接mysql
1、安裝mysql,並創建數據庫和數據表,並插入用戶名和密碼。
2、然後安裝tomcat。
3、修改默認端口號為8010。
4、數據庫驅動放到目錄:D:\Program Files\Apache Software Foundation\Tomcat 8.0\lib。
5、修改文件tomcat-users.xmlD:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\tomcat-users.xml。
6、瀏覽器中輸入:,驗證tomcat能否連接mysql,testjdbc.jsp的信息如下所示。
Servlet JDBC中用數據源,連接池連接mysql時的問題
在META-INF下的context.xml配置數據源,當然沒有用處。
到tomcat安裝目錄下conf/server.xml中配置數據源,
格式是Context
Resource name=”jdbc/mydb” auth=”container”
type=”javax.sql.DataSource” maxActive=”1000″
maxIdle=”30″ maxWait=”10000″
username=”root” password=”wangxu456753″ driverClass=”com.mysql.jdbc.Driver”
url=”jdbc:mysql://localhost:3306/mydb?autoReconnect=true”
/Resource
/Context
原創文章,作者:UYSA,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/144772.html