网站优化

网站优化

Products

当前位置:首页 > 网站优化 >

学习MySQL连接池,如何优化事务处理?

GG网络技术分享 2025-11-21 01:01 8


啥是数据库连接池?

哇,数据库连接池是个啥?轻巧松说就像一个仓库,里面有hen许多门钥匙,每把钥匙douNeng打开一扇门,也就是一个数据库连接。我们不需要每次需要门的时候dou去找钥匙,而是直接从仓库里拿一把钥匙,用完后再放回去,这样就方便许多了。

不用数据库连接池的时候会发生啥?

哎呀,不用数据库连接池就像每次去开门dou要去找钥匙,太麻烦了。先说说得打开门,然后得找到钥匙,然后才Neng开门,再说说还要把钥匙放回去。这玩意儿过程就像TCP建立连接的三次握手、 MySQL认证的三次握手、真实正的SQL施行、MySQL的关闭、TCP的四次握手关闭,真实是累死个人。

那用数据库连接池呢?

用数据库连接池就像有个仓库, 里面有优良许多把钥匙,我们直接从仓库里拿一把钥匙开门,用完后再放回去。这样就不需要每次dou去找钥匙了 节省了优良许多时候,还让门开的geng迅速,就像连接池事先申请优良相关的数据库连接,然后在之后的SQL操作中会复用这些个数据库连接,操作收尾之后数据库也不会断开连接,而是将数据库对象放回到数据库连接池中。

用数据库连接池的优良处:

先说说 材料沉用,就像我们用完钥匙再放回去,不用每次dou去找新鲜钥匙,这样就少许些了性Neng开销。接下来 geng迅速的系统响应速度,基本上原因是连接池在初始化过程中,Yi经创建了若干数据库连接置于池中备用,我们直接用现成的连接,节省了初始化和释放连接的时候。再说说统一的连接管理,就像我们统一管理钥匙,避免了数据库连接泄露的情况。

那连接池巨大细小怎么设置呢?

Ru果服务器CPU是4核i7的,连接池巨大细小得为=)。哎呀,这玩意儿公式怎么这么麻烦,我也不懂,还是让巨大人们去算吧。

推荐视频和资料:

90分钟搞懂数据库连接池手艺|linux后台开发

《tcp/ip详解卷一》:150行代码拉开协议栈实现的篇章

学地址:C/C++Linux服务器开发/后台架构师-学视频教程-腾讯课堂

需要C/C++ Linux服务器架构师学资料加qun 获取, 免费分享

源码下载:

下载方式:

db_pool目录下有两个目录,mysql_pool目录为MySQL连接池代码,redis_pool为redis连接池代码

下面介绍mysql_pool

CDBConn解析

概念:代表一个数据连接对象实例

相关成员:

m_pDBPool:该数据库连接对象所属的数据库连接池

构造函数:绑定自己所属于哪个数据库连接池

Init函数:创建数据库连接句柄

CDBPool解析

概念:代表一个数据库连接池

Init函数:常见指定数量的数据库实例句柄,然后添加到m_free_list中,供后面用

GetDBConn函数:用于从空闲队列中返回Neng用的数据库连接句柄

RelDBConn函数:程序用完该数据库句柄之后将句柄放回到空闲队列中

测试之前,将代码中的数据库地址、端口、账号密码等改为自己的

进入MySQL,创建mysql_pool_test数据库

进入到mysql_pool目录下创建一个build目录并进入:

然后输入如下的命令进行编译

之后就会在目录下生成如下的可施行文件

输入如下两条命令进行测试:Nengkan到不用数据库连接池,整个操作耗时4秒左右;用连接池之后整个操作耗时2秒左右,提升了一倍

下面介绍redis_pool

测试

进入redis,Nengkan到我们新鲜建的key:

连接先建立一些连接,并且这些个连接允许共享,所以呢这样就节省了每次连接的时候开销。Mysql数据库为例,连接池在Tomcat中的配置与用。

创建数据库Student,表student

配置server.xml文件。Tomcat安装目录下conf中server.xml文件。

GlobalNamingResources

Resource

name="jdbc/DBPool";

type="javax.sql.DataSource";

password="";

driverClassName="com.mysql.jdbc.Driver";

maxIdle="";

maxWait="";

username="root";

url="jdbc:mysql://localhost:/student";

maxActive="";

/

name:指定连接池的名称

type:指定连接池的类, 他负责连接池的事务处理

url:指定要连接的数据库

driverClassName:指定连接数据库用的驱动程序

username:数据库用户名

password:数据库密码

maxWait:指定Zui巨大建立连接等待时候,Ru果超出此时候将接到异常

maxIdle:指定连接池中连接的Zui巨大空闲数

maxActive:指定连接池Zui巨大连接数

配置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

配置context.xml文件

与server.xml文件所在的位置相同。

Context

ResourceLink

global="jdbc/DBPool";

测试

DataSource pool = null;

Context env = null;

Connection conn = null;

Statement st = null;

ResultSet rs = null;

try{

env = new InitialContext.lookup;

//检索指定的对象,返回此上下文的一个新鲜实例

pool = env.lookup;

//得到数据库连接池

if{out.println;}

con = pool.getConnection;

st = con.createStatement;

rs = st.executeQuery;

}catch{out.println);}

标签:

提交需求或反馈

Demand feedback