校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > golang中連接mysql數(shù)據(jù)庫

golang中連接mysql數(shù)據(jù)庫

熱門標(biāo)簽:谷歌美發(fā)店地圖標(biāo)注 江蘇呼叫中心外呼系統(tǒng)有效果嗎 官渡電銷外呼管理系統(tǒng)怎么收費(fèi) 杭州人工智能電銷機(jī)器人費(fèi)用 利用地圖標(biāo)注位置 地圖區(qū)域圖標(biāo)注后導(dǎo)出 赤峰電銷 400開頭電話怎樣申請 貴州電話智能外呼系統(tǒng)

golang中連接mysql數(shù)據(jù)庫,需要使用一個第三方類庫github.com/go-sql-driver/mysql,在這個類庫中就實(shí)現(xiàn)了mysql的連接池,并且只需要設(shè)置兩個參數(shù)就可以實(shí)現(xiàn)

一般連接mysql首先需要調(diào)用sql.Open函數(shù),但是此時并沒有真正的去連接mysql,而是只創(chuàng)建了一個Db的對象而已。當(dāng)執(zhí)行Query或者是Exec方法時,才會去真正的連接數(shù)據(jù)庫。

默認(rèn)情況下。每次執(zhí)行sql語句,都會創(chuàng)建一條tcp連接,執(zhí)行結(jié)束就會斷掉連接,但是會保留兩條連接閑置。當(dāng)下次再執(zhí)行 sql時,先用閑置的連接,不夠的時候再去創(chuàng)建連接。

當(dāng)設(shè)置了Db類下的這兩個參數(shù),就可以真正的實(shí)現(xiàn)連接池了。

db.SetMaxOpenConns(10)
db.SetMaxIdleConns(5)

SetMaxOpenConns(10)是設(shè)置的最大連接數(shù),也就是甭管你多少并發(fā),只能最多創(chuàng)建10條tcp連接,還有要注意的一點(diǎn)是,當(dāng)執(zhí)行完sql,連接轉(zhuǎn)移到rows對象上,如果rows不關(guān)閉,這條連接不會被放回池里,其他并發(fā)獲取不到連接會被阻塞住。
SetMaxIdleConns(5)是設(shè)置的執(zhí)行完閑置的連接,這些就算是執(zhí)行結(jié)束了sql語句還是會保留著的

測試的流程是這樣的,首先在代碼中并發(fā)100次執(zhí)行sql,開一個窗口不停的netstat查看3306端口看tcp連接的情況,可以看到最大就10條tcp連接,執(zhí)行完后會有5條連接保持住,開一個窗口看tcpdump中3306端口的數(shù)據(jù)請求情況,在閑置連接的時候,會每10秒傳遞數(shù)據(jù)給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)
  //連接數(shù)據(jù)庫查詢
  for i := 0; i  100; i++ {
    go func(i int) {
      mSql := "select * from user"
      rows, _ := db.Query(mSql)
      rows.Close() //這里如果不釋放連接到池里,執(zhí)行5次后其他并發(fā)就會阻塞
      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秒請求一次數(shù)據(jù)

tcpdump -i lo port 3306 -vv

以上就是golang中連接mysql數(shù)據(jù)庫的詳細(xì)內(nèi)容,更多關(guān)于golang 連接mysql數(shù)據(jù)庫的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • golang 通過ssh代理連接mysql的操作
  • Golang操作MySql數(shù)據(jù)庫的完整步驟記錄
  • golang實(shí)現(xiàn)mysql數(shù)據(jù)庫事務(wù)的提交與回滾

標(biāo)簽:鷹潭 保定 武漢 泰安 黔西 河池 宜春 松原

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang中連接mysql數(shù)據(jù)庫》,本文關(guān)鍵詞  golang,中,連接,mysql,數(shù)據(jù)庫,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang中連接mysql數(shù)據(jù)庫》相關(guān)的同類信息!
  • 本頁收集關(guān)于golang中連接mysql數(shù)據(jù)庫的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 扎赉特旗| 安化县| 临潭县| 容城县| 建昌县| 青川县| 岚皋县| 新化县| 建瓯市| 特克斯县| 丹巴县| 望城县| 青铜峡市| 郑州市| 九龙坡区| 固镇县| 内乡县| 曲靖市| 永和县| 巨鹿县| 叶城县| 大方县| 洛浦县| 宣化县| 姚安县| 巴东县| 土默特右旗| 应城市| 白玉县| 乌拉特后旗| 丰原市| 西平县| 旌德县| 子长县| 长泰县| 阿尔山市| 武冈市| 灌阳县| 依安县| 长汀县| 东光县|