2023年7月23日发(作者:)
golang中连接mysql数据库golang中连接mysql数据库,需要使⽤⼀个第三⽅类库,在这个类库中就实现了mysql的连接池,并且只需要设置两个参数就可以实现⼀般连接mysql⾸先需要调⽤函数,但是此时并没有真正的去连接mysql,⽽是只创建了⼀个Db的对象⽽已。当执⾏Query或者是Exec⽅法时,才会去真正的连接数据库。默认情况下。每次执⾏sql语句,都会创建⼀条tcp连接,执⾏结束就会断掉连接,但是会保留两条连接闲置。当下次再执⾏sql时,先⽤闲置的连接,不够的时候再去创建连接。当设置了Db类下的这两个参数,就可以真正的实现连接池了。OpenConns(10)IdleConns(5)SetMaxOpenConns(10)是设置的最⼤连接数,也就是甭管你多少并发,只能最多创建10条tcp连接,还有要注意的⼀点是,当执⾏完sql,连接转移到rows对象上,如果rows不关闭,这条连接不会被放回池⾥,其他并发获取不到连接会被阻塞住。SetMaxIdleConns(5)是设置的执⾏完闲置的连接,这些就算是执⾏结束了sql语句还是会保留着的测试的流程是这样的,⾸先在代码中并发100次执⾏sql,开⼀个窗⼝不停的netstat查看3306端⼝看tcp连接的情况,可以看到最⼤就10条tcp连接,执⾏完后会有5条连接保持住,开⼀个窗⼝看tcpdump中3306端⼝的数据请求情况,在闲置连接的时候,会每10秒传递数据给mysql,使得闲置连接保持住。先要拉取⼀下github包,go get /go-sql-driver/mysqlpackage mainimport ( "database/sql" "fmt" "time" _ "/go-sql-driver/mysql")func main() { db, _ := ("mysql", "root:123456@tcp(127.0.0.1:3306)/gocron") OpenConns(10) IdleConns(5) //连接数据库查询 for i := 0; i < 100; i++ { go func(i int) { mSql := "select * from user" rows, _ := (mSql) () //这⾥如果不释放连接到池⾥,执⾏5次后其他并发就会阻塞 n("第 ", i) }(i) } for { () }}开⼀个窗⼝不停的netstatwhile 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数据库的资料请关注其它相关⽂章!
发布者:admin,转转请注明出处:http://www.yc00.com/news/1690106062a306281.html
评论列表(0条)