golang中连接mysql数据库,需要使用一个第三方类库github.com/go-sql-driver/mysql,在这个类库中就实现了mysql的连接池,并且只需要设置两个参数就可以实现
一般连接mysql首先需要调用sql.Openhtml" target="_blank">函数,但是此时并没有真正的去连接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(i int) { 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数据库的详细内容,更多关于golang 连接mysql数据库的资料请关注小牛知识库其它相关文章!
本文我们为大家介绍 Python3 使用 PyMySQL 连接数据库,并实现简单的增删改查。 什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。 PyMySQL 安装 在使用
如果问题模棱两可,请道歉。
本文向大家介绍java连接mysql数据库 java连接sql server数据库,包括了java连接mysql数据库 java连接sql server数据库的使用技巧和注意事项,需要的朋友参考一下 在java的应用中,我们经常会对数据库进行必要的操作,下来我们就了解一下如何用java连接mysql数据库 以及java连接sql server数据库 一、mysql 二、sql server 以上就
我使用的是ubuntu系统和Mysql 8.0。我试图用jdbc类连接数据库,但出现了一个错误,尽管我添加了mysql连接器。jar文件, 我在下面提到的错误-- JAVAlang.module。FindException:读取模块:/home/surya/eclipse workspace/Advancedjava/bin时出错,原因是:java。lang.module。InvalidModul
我已经写出了我的数据库,它可以运行(在MySql上),并创建了我自己的jsp程序,但当我试图测试数据库和文件之间的连接时,我发现了这个错误 HTTP状态500-无法为JSP编译类: 类型异常报告 消息无法为JSP编译类: 说明服务器遇到内部错误,无法满足此请求。 例外 org.apache.jasper.无法为JSP编译类: 在生成的java文件中的第:[14]行发生错误:[C:\Program
我是debezium的新手,我正在尝试将我的kafka连接器连接到我本地WAMP服务器上已经存在的MySQL数据库。 我用我的邮递员发了以下邮件 我的不良反应