上篇文章Mysql连接池详解——原理部分,我们聊了连接池的原理,这篇文章我们来聊聊连接池的设计与具体实现。
一、连接池接口要点
使用连接池要预先与数据库建立连接。
- 连接到数据库,需要目标数据库所在主机的IP、端口、用户名、密码及想要访问的数据库名。
- 设置最小和最大连接数
- 需要一个容器管理这些连接,比如:List或者Set;
- 获取一条数据库连接
- 归还连接;
- 销毁连接池
二、连接池的设计逻辑
2.1 连接池类:CMysqlDBPool
2.2 连接池初始化逻辑
2.3 连接池获取连接逻辑
2.4 归还连接逻辑
2.5 连接池析构(销毁)逻辑
三、参考代码实现
MysqlDBPool.h
// // Create by Panda 2022-09-17 // #ifndef MYSQL_DB_POOL_H_ #define MYSQL_DB_POOL_H_ #include <iostream> #include <string> #include <list> #include <mutex> #include <condition_variable> #include <mysql.h> using namespace std; #define MIN_CONN_COUNTS 2 class CMysqlDBPool; class CDBConn{ public: CDBConn(){ } CDBConn(CMysqlDBPool* pool); virtual ~CMysqlDBPool(); void Init(); // TODO Mysql 接口实现 private: CMysqlDBPool* m_dbPool; //用于连接建立时获取数据库信息 MYSQL* m_mysql; //该条连接的唯一标识 } class CMysqlDBPool{ // 只是负责管理连接,真正干活的是CDBConn public: CMysqlDBPool(){ } CMysqlDBPool(const char* pool_name, const char* db_ip, u_int16_t db_port, const char* db_user, const char* db_pwd, const char* db_Name, uint32_t maxConnNum); virtual ~CMysqlDBPool(); void Init_db_pool(); CDBConn* GetDBConn(const int time_out = 0); //获取数据库连接, ms void Returnconn(CDBConn* pConn