本文参考自golang mgo的mongo连接池设置:必须手动加上maxPoolSize
查看原文: 原文地址
熊猫TV的礼物系统使用了golang的 mongo库 mgo,中间踩了一些坑,总结下避免大家再踩坑
golang的mgo库说明里是说明了开启连接复用的,但观察实验发现,这并没有根本实现连接的控制,连接复用其实仅在当前操作 (session.Close 之前 )生效,最终还是需要程序员自行去限制连接才行。
废话不多说,开始上代码
GlobalMgoSession, err := mgo.Dial(host) func (m *MongoBaseDao) Get(tablename string, id string, result interface{}) interface{} { session := GlobalMgoSession.Clone() defer session.Close() collection := session.DB(globalMgoDbName).C(tablename) err := collection.FindId(bson.ObjectIdHex(id)).One(result) if err != nil { logkit.Logger.Error("mongo_base method:Get " + err.Error()) } return result }
golang main入口启动时,我们会创建一个全局session,然后每次使用时clone session的信息和连接,用于本次请求,使用后调用session.Close() 释放连接。