golang中连接mysql数据库,需要使用一个第三方类库github.com/go-sql-driver/mysql,在这个类库中就实现了mysql的连接池,并且只需要设置两个参数就可以实现

一般连接mysql首先需要调用sql.Open函数,但是此时并没有真正的去连接mysql,而是只创建了一个Db的对象而已。当执行Query或者是Exec方法时,才会去真正的连接数据库。

默认情况下。每次执行sql语句,都会创建一条tcp连接,执行结束就会断掉连接,但是会保留两条连接闲置。当下次再执行 sql时,先用闲置的连接,不够的时候再去创建连接。

当设置了Db类下的这两个参数,就可以真正的实现连接池了。

db.SetMaxOpenConns(10)

db.SetMaxIdleConns(5)

SetMaxOpenConns(10)是设置的最大连接数,也就是甭管你多少并发,只能最多创建10条tcp连接,还有要注意的一点是,当执行完sql,连接转移到rows对象上,如果rows不关闭,这条连接不会被放回池里,其他并发获取不到连接会被阻塞住。

SetMaxIdleConns(5)是设置的执行完闲置的连接,这些就算是执行结束了sql语句还是会保留着的

测试的流程是这样的,首先在代码中并发100次执行sql,开一个窗口不停的netstat查看3306端口看tcp连接的情况,可以看到最大就10条tcp连接,执行完后会有5条连接保持住,开一个窗口看tcpdump中3306端口的数据请求情况,在闲置连接的时候,会每10秒传递数据给mysql,使得闲置连接保持住。

mysqlClient.go

先要拉取一下github包,go get github.com/go-sql-driver/mysql

package main

import ("database/sql"

"fmt"

"time"_"github.com/go-sql-driver/mysql")

func main() {

db, _ := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/gocron")

db.SetMaxOpenConns(10)

db.SetMaxIdleConns(5)//连接数据库查询

for i := 0; i < 100; i++{

go func(iint) {

mSql := "select * from user"rows, _ :=db.Query(mSql)

rows.Close()//这里如果不释放连接到池里,执行5次后其他并发就会阻塞

fmt.Println("第", i)

}(i)

}for{time.Sleep(time.Second)

}

}

开一个窗口不停的netstat

while true;do clear;date;netstat -altupn|grep 3306|grep Client;sleep 1;done

开一个窗口tcpdump看闲置连接的请求情况,每隔15秒请求一次数据

tcpdump -i lo port 3306 -vv

golang mysql连接池原理_[Go] golang实现mysql连接池相关推荐

  1. java 连接池实例_功能完善的Java连接池调用实例

    /** * Title: ConnectPool.java * Description: 连接池管理器 * Copyright: Copyright © 2002/12/25 * Company: * ...

  2. mysql在线检测失败_一则线上MySql连接异常的排查过程

    Mysql作为一个常用数据库,在互联网系统应用很多.有些故障是其自身的bug,有些则不是,这里以前段时间遇到的问题举例. 问题## 当时遇到的症状是这样的,我们的应用在线上测试环境,JMeter测试过 ...

  3. 易语言 mysql查询 中文乱码_大佬们E语言连接MYSQL输出中文乱码怎么破

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 .版本 2 .支持库 mysql .支持库 iext .程序集 窗口程序集_启动窗口 .子程序 _按钮1_被单击 数据库连接句柄 = 连接MySql (& ...

  4. mysql内连接查询原理_MySQL全面瓦解12:连接查询的原理和应用

    概述 MySQL最强大的功能之一就是能在数据检索的执行中连接(join)表.大部分的单表数据查询并不能满足我们的需求,这时候我们就需要连接一个或者多个表,并通过一些条件过滤筛选出我们需要的数据. 了解 ...

  5. mysql连接access失败_我用工具怎么连接不上mysql数据库的? MySql access denied for user错误...

    MySql access denied for user错误 方法/步骤 MySql远程连接时的"access denied for user **@**"错误,搞的我很头大,后来 ...

  6. mysql版本链图解_图解 SQL 中各种连接 JOIN

    先用文字来捋一下思路,数据库操作中无非就是「增删查改」,其中「 查」用得最多且最复杂,变化多端.查询的时候,我们可以只是单表查询,也可以是多表连接查询,单表查询中的学问也很大,但限于篇幅,本次主要分享 ...

  7. 由浅入深探究mysql索引结构原理_性能分析与优化_由浅入深探究mysql索引结构原理、性能分析与优化...

    由浅入深探究mysql索引结构原理.性能分析与优化 第一部分:基础知识第二部分:MYISAM和INNODB索引结构1, 简单介绍B-tree B+ tree树 2, MyisAM索引结构 3, Ann ...

  8. mysql数据库视图原理_详细分析mysql视图的原理及使用方法

    前言: 在MySQL中,视图可能是我们最常用的数据库对象之一了.那么你知道视图和表的区别吗?你知道创建及使用视图要注意哪些点吗?可能很多人对视图只是一知半解,想详细了解视图的同学看过来哟,本篇文章会详 ...

  9. mysql自然连接和等值连接_区分笛卡儿积,自然连接,等值连接,内连接,外连接...

    1.区分笛卡儿积,自然连接,等值连接,内连接,外连接(左连接,右连接和全连接) 假设存在两张表R和S,这里使用的是MySQL数据库. 下面这张表是R 下面这张是S 为了测试左连接和右连接,现在增加一张 ...

最新文章

  1. 自己编写linux系统,自己动手 编写Linux系统的设备驱动程序
  2. 制作ubuntu 18.04 U盘启动盘
  3. 工厂模式(简单工厂、工厂方法、抽象工厂)
  4. 谷歌浏览器bug调试快捷键_Bug压榨初学者指南:如何使用调试器和其他工具查找和修复Bug
  5. Ubuntu 安装 Vue.js
  6. poj1182(并查集)
  7. 如何将Netbeans配置更加合理
  8. 帮助中心 开源_如何不获得开源帮助
  9. python爬虫网页数据案例_python+vue实现网站爬虫数据分析案例
  10. Unity Occlusion Culling 遮挡剔除研究
  11. win10 安装db2 10.1 并使用DBserver连接db2数据库
  12. 体验不尽,进化不止,看视频云技术六大创新
  13. IOS15.4无法运行WebGL2.0问题
  14. 哪类人适合学软件测试?零基础能学测试吗?
  15. Mock测试-优缺点分析
  16. 图像处理——简单浮雕效果和倒影效果实战
  17. GDOI2021自闭记
  18. 什么是图像直方图直方图均衡的原理和作用图像信噪比的概念
  19. 2022.02.09_Java学习总结_网络编程、正则表达式
  20. 分层结构的生活例子_分层作业设计案例

热门文章

  1. 虚拟化 VS 容器化(docker)
  2. Java Web学习总结(40)——JSP中的Application对象和Session对象常用方法详解
  3. 50道编程小题目之【完数】
  4. python百分比堆积条形图_Pandas 堆积条形图中的元素顺序 - python
  5. linux集群中mpi的并行计算环境简单配置,linux集群中MPI的并行计算环境简单配置...
  6. java 内部类序列化_Gson如何序列化内部类
  7. jquery +ajax 上传加预览
  8. 无人车首例阵亡事件,AI教育春江水暖
  9. Java : java基础(1)
  10. 四、shell编程练习题(1-20)