• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    golang中连接mysql数据库

    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(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数据库的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • golang 通过ssh代理连接mysql的操作
    • Golang操作MySql数据库的完整步骤记录
    • golang实现mysql数据库事务的提交与回滚
    上一篇:Golang 语言map底层实现原理解析
    下一篇:Golang发送http GET请求的示例代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    golang中连接mysql数据库 golang,中,连接,mysql,数据库,