编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Mysql连接池上篇 #endif mysql(mysql中的连接)

wxchong 2024-07-15 10:03:01 开源技术 25 ℃ 0 评论

Mysql连接池上篇

#endif

mysql_connect.cpp

#include

#include

#include

#include "mysql_connect.h"

ConnectionPool*

ConnectionPool::pool = nullptr;

//private

//构造函数

ConnectionPool::ConnectionPool(std::string name, std::string pwd, std::string nurl, int maxSize):

username(name), password(pwd), url(nurl), poolSize(maxSize)

{

//得到mysql驱动

driver = get_driver_instance();

//开始初始化大小一半

initConnectPool(poolSize/2);

}

//析构函数

ConnectionPool::~ConnectionPool()

{

destoryPool();

}

//得到连接池大小

int

ConnectionPool::getPoolSize()

{

return conList.size();

}

//增加连接

void

ConnectionPool::addConn(int size)

{

for(int i = 0; i < size; ++i)

{

//创建连接

Connection *conn = driver->connect(url, username, password);

std::shared_ptr sp(conn,

[](Connection *conn){

delete conn;

});

conList.push_back(std::move(sp));

}

}

//初始化连接池

void

ConnectionPool::initConnectPool(int initialSize)

{

//加锁,增添一个连接

std::lock_guard locker(lock);

addConn(initialSize);

}

//销毁一个连接

void

ConnectionPool::destoryOneConn()

{

//智能指针加std::move转移一个连接的“所有权”,当出作用域时,自动调用关闭connect

std::shared_ptr &&sp = std::move(conList.front());

sp->close();

--poolSize;

}

//销毁整个连接池

void

ConnectionPool::destoryPool()

{

for(auto &conn : conList)

{

//依次转移所有权,出作用域时,关闭连接,出作用域时智能指针自动释放

std::shared_ptr &&sp = std::move(conList.front());

sp->close();

}

}

//扩大连接池

void

ConnectionPool::expandPool(int size)

{

std::lock_guard locker(lock);

addConn(size);

poolSize += size;

}

//缩小连接池

void

ConnectionPool::reducePool(int size)

{

std::lock_guard locker(lock);

//减小的大小不能超过存储的大小

if(size > poolSize)

{

return;

}

for(int i = 0; i < size; i++)

{

//sp point new object, old object r

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表