国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術文章
文章詳情頁

golang中連接mysql數據庫

瀏覽:146日期:2023-10-24 16:05:38

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 mainimport ( '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

golang中連接mysql數據庫

開一個窗口tcpdump看閑置連接的請求情況,每隔15秒請求一次數據

tcpdump -i lo port 3306 -vv

golang中連接mysql數據庫

以上就是golang中連接mysql數據庫的詳細內容,更多關于golang 連接mysql數據庫的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 宜宾县| 和田市| 通榆县| 酒泉市| 鲜城| 江山市| 玉树县| 綦江县| 贵溪市| 沙湾县| 鄂尔多斯市| 定安县| 福泉市| 嘉义市| 昌江| 武穴市| 东至县| 商丘市| 石城县| 上虞市| 紫云| 庆阳市| 包头市| 曲麻莱县| 宣威市| 阜平县| 玛曲县| 山东省| 汕头市| 巨野县| 芷江| 宁晋县| 湖口县| 都江堰市| 灵丘县| 岳西县| 哈尔滨市| 黔西县| 武汉市| 繁昌县| 肇东市|