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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
SQL 关系型数据库 MySQL
池式组件-Mysql连接池的原理与实现
池式组件-Mysql连接池的原理与实现
125 0
|
6月前
|
NoSQL Java 关系型数据库
mysql和redis连接池
mysql和redis连接池
60 0
|
6月前
|
SQL 关系型数据库 MySQL
Mysql连接池详解——原理部分
Mysql连接池详解——原理部分
|
6月前
|
关系型数据库 MySQL Java
mysql连接池和redis连接池的实现
mysql连接池和redis连接池的实现
86 0
|
6月前
|
关系型数据库 MySQL Java
mysql连接池和redis连接池
mysql连接池和redis连接池
192 0
|
6月前
|
SQL 关系型数据库 MySQL
Spring_jdbc数据连接池(mysql实现增、删、改、查)
Spring_jdbc数据连接池(mysql实现增、删、改、查)
51 0
|
4月前
|
SQL 监控 druid
MySQL连接池DataSource怎样使用?
**摘要:** 本文深入讨论了数据库连接池的重要性,特别是DruidDataSource,它是阿里巴巴的高性能Java数据库连接池。DruidDataSource不仅提供连接管理,还包括SQL监控和性能优化功能。文中通过代码示例展示了如何配置和使用DruidDataSource,包括在Java应用和Spring Boot中的集成,并提到了SQL执行监控和连接池参数的合理设置,强调了定期监控和使用内置监控工具以优化应用性能。
MySQL连接池DataSource怎样使用?
|
4月前
|
SQL 监控 druid
MySQL连接池DataSource是什么?
**摘要:** 本文探讨了数据库连接池在高并发Web应用中的重要性,聚焦于DruidDataSource,一个高效的Java数据库连接池组件。DruidDataSource提供连接池管理、SQL监控及性能优化功能。文中通过代码示例展示了如何配置和使用DruidDataSource,包括在Java应用中的直接配置和在Spring Boot中的集成。此外,还提到了使用技巧,如合理设置连接池参数、定期监控调整以及利用Druid的内置监控工具优化性能。
128 3
|
4月前
|
SQL 监控 druid
MySQL连接池DataSource怎么使用?
**摘要:** 本文探讨了数据库连接池在高并发Web应用中的重要性,特别聚焦于阿里巴巴的DruidDataSource。DruidDataSource是一个高效的Java数据库连接池,包含监控、SQL防护和日志功能。文中通过示例展示了如何配置和使用DruidDataSource,包括在Java应用中的直接配置和在Spring Boot中的集成,并提到了启用SQL监控。此外,还分享了设置连接池参数的技巧,如合理设定初始、最大和最小连接数,并强调了定期监控和使用内置监控工具优化性能的重要性。
172 0
|
5月前
|
关系型数据库 MySQL 分布式数据库
PolarDB操作报错合集之无法创建mysql的连接池什么导致的
在使用阿里云的PolarDB(包括PolarDB-X)时,用户可能会遇到各种操作报错。下面汇总了一些常见的报错情况及其可能的原因和解决办法:1.安装PolarDB-X报错、2.PolarDB安装后无法连接、3.PolarDB-X 使用rpm安装启动卡顿、4.PolarDB执行UPDATE/INSERT报错、5.DDL操作提示“Lock conflict”、6.数据集成时联通PolarDB报错、7.编译DN报错(RockyLinux)、8.CheckStorage报错(源数据库实例被删除)、9.嵌套事务错误(TDDL-4604)。

热门文章

最新文章

下一篇
无影云桌面