昨天发现的,golang连接mysql并发出现bad connection,我只是升级到go1.1而已,mysql的最大连接我已经调节到5000了,但从phpmyadmin界面上看见连接不断增大到phpmyadmin出现连接错误,夸张。
我的代码大概就是一个
db, e := sql.Open("mymysql", "tcp:127.0.0.1:3306*xxxdb/root/123456789")
for rows.Next(){
....
....
//checkcount,检查数据是否存在
checkcount(db,xxx)
....
insertdata(db,yyyyy)
}
为什么连接会上千的,怪啊,最后参考网上的代码,改了个连接池出来
var MAX_POOL_SIZE=200
var MySQLPool chan *sql.DB
func getMySQL() *sql.DB {
if MySQLPool == nil {
MySQLPool = make(chan *sql.DB, MAX_POOL_SIZE)
}
if len(MySQLPool) == 0 {
go func() {
for i := 0; i < MAX_POOL_SIZE/2; i++ {
mysqlc, err := sql.Open("mymysql", "tcp:127.0.0.1:3306*xxxdb/root/123456789")
if err != nil {
panic(err)
}
putMySQL(mysqlc)
}
}()
}
return <-MySQLPool
}
func putMySQL(conn *sql.DB) {
if MySQLPool == nil {
MySQLPool = make(chan *sql.DB, MAX_POOL_SIZE)
}
if len(MySQLPool) == MAX_POOL_SIZE {
conn.Close()
return
}
MySQLPool <- conn
}
然后代码里引用是:
dbx:=getMySQL()
rows, err := dbx.Query(“select count(*)as tcount from xxx”)
defer dbx.Close()
这样之后,并发连接才维持在200左近, go语言就是怪啊,对于我这半路出家学编程的,十分辛苦呢,好在还有goole大人.
还有想说,java同样的代码连接没增大,程序功能一样,更加快呢,不过就是写得别扭一点, python同样的功能代码,用了连接池,维持连接在20左近,实在差太远了,
突然觉得go语言是非主流呢.!