Mysql连接池详解——实现部分

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mysql连接池详解——实现部分

上篇文章Mysql连接池详解——原理部分,我们聊了连接池的原理,这篇文章我们来聊聊连接池的设计与具体实现。

一、连接池接口要点

使用连接池要预先与数据库建立连接。

  1. 连接到数据库,需要目标数据库所在主机的IP、端口、用户名、密码及想要访问的数据库名。
  2. 设置最小和最大连接数
  3. 需要一个容器管理这些连接,比如:List或者Set;
  4. 获取一条数据库连接
  5. 归还连接;
  6. 销毁连接池

二、连接池的设计逻辑

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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
SQL 关系型数据库 MySQL
池式组件-Mysql连接池的原理与实现
池式组件-Mysql连接池的原理与实现
270 0
|
NoSQL Java 关系型数据库
mysql和redis连接池
mysql和redis连接池
130 0
|
SQL 关系型数据库 MySQL
Mysql连接池详解——原理部分
Mysql连接池详解——原理部分
|
关系型数据库 MySQL Java
mysql连接池和redis连接池的实现
mysql连接池和redis连接池的实现
170 0
|
关系型数据库 MySQL Java
mysql连接池和redis连接池
mysql连接池和redis连接池
318 0
|
SQL 关系型数据库 MySQL
Spring_jdbc数据连接池(mysql实现增、删、改、查)
Spring_jdbc数据连接池(mysql实现增、删、改、查)
146 0
|
SQL 监控 druid
MySQL连接池DataSource怎样使用?
**摘要:** 本文深入讨论了数据库连接池的重要性,特别是DruidDataSource,它是阿里巴巴的高性能Java数据库连接池。DruidDataSource不仅提供连接管理,还包括SQL监控和性能优化功能。文中通过代码示例展示了如何配置和使用DruidDataSource,包括在Java应用和Spring Boot中的集成,并提到了SQL执行监控和连接池参数的合理设置,强调了定期监控和使用内置监控工具以优化应用性能。
343 2
MySQL连接池DataSource怎样使用?
|
SQL 监控 druid
MySQL连接池DataSource是什么?
**摘要:** 本文探讨了数据库连接池在高并发Web应用中的重要性,聚焦于DruidDataSource,一个高效的Java数据库连接池组件。DruidDataSource提供连接池管理、SQL监控及性能优化功能。文中通过代码示例展示了如何配置和使用DruidDataSource,包括在Java应用中的直接配置和在Spring Boot中的集成。此外,还提到了使用技巧,如合理设置连接池参数、定期监控调整以及利用Druid的内置监控工具优化性能。
338 3
|
SQL 缓存 网络协议
C++实现MySQL数据库连接池
为了提升MySQL数据库(基于C/S设计(客户端-服务器))的访问瓶颈,除了在服务器端增加缓冲服务器缓存常用的数据之外
751 0
|
SQL 监控 druid
MySQL连接池DataSource怎么使用?
**摘要:** 本文探讨了数据库连接池在高并发Web应用中的重要性,特别聚焦于阿里巴巴的DruidDataSource。DruidDataSource是一个高效的Java数据库连接池,包含监控、SQL防护和日志功能。文中通过示例展示了如何配置和使用DruidDataSource,包括在Java应用中的直接配置和在Spring Boot中的集成,并提到了启用SQL监控。此外,还分享了设置连接池参数的技巧,如合理设定初始、最大和最小连接数,并强调了定期监控和使用内置监控工具优化性能的重要性。
675 0

推荐镜像

更多
下一篇
oss云网关配置