咔叽网单游戏基地

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 65|回复: 0

[Golang] golang中连接mysql数据库

[复制链接]
  • TA的每日心情
    无聊
    2019-6-2 14:11
  • 签到天数: 4 天

    [LV.2]圆转纯熟

    2万

    主题

    2万

    帖子

    12万

    积分

    帖子管理员

    Rank: 9Rank: 9Rank: 9

    积分
    124347
    发表于 2020-12-19 15:22:41 | 显示全部楼层 |阅读模式
    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
    1. package main
    2. import (
    3.   "database/sql"
    4.   "fmt"
    5.   "time"
    6.   _ "github.com/go-sql-driver/mysql"
    7. )
    8. func main() {
    9.   db, _ := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/gocron")
    10.   db.SetMaxOpenConns(10)
    11.   db.SetMaxIdleConns(5)
    12.   //连接数据库查询
    13.   for i := 0; i < 100; i++ {
    14.     go func(i int) {
    15.       mSql := "select * from user"
    16.       rows, _ := db.Query(mSql)
    17.       rows.Close() //这里如果不释放连接到池里,执行5次后其他并发就会阻塞
    18.       fmt.Println("第 ", i)
    19.     }(i)
    20.   }
    21.   for {
    22.     time.Sleep(time.Second)
    23.   }
    24. }
    复制代码
    开一个窗口不停的netstat
    while true;do clear;date;netstat -altupn|grep 3306|grep Client;sleep 1;done
    golang中连接mysql数据库-1.jpg

    开一个窗口tcpdump看闲置连接的请求情况,每隔15秒请求一次数据
    tcpdump -i lo port 3306 -vv
    golang中连接mysql数据库-2.jpg

    以上就是golang中连接mysql数据库的详细内容,更多关于golang 连接mysql数据库的资料请关注咔叽论坛其它相关文章!

    原文地址:https://www.jb51.net/article/201491.htm
    回复

    使用道具 举报

    QQ|免责声明|手机版|咔叽网单

    GMT+8, 2021-3-3 04:02

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表