golang mgo的mongo连接池设置:必须手动加上maxPoolSize

本文探讨了在使用Golang的mgo库连接MongoDB时,如何手动设置maxPoolSize以优化连接池。尽管mgo库默认开启连接复用,但在高并发场景下,不手动设置maxPoolSize可能导致连接数激增,影响性能。通过设置maxPoolSize,可以限制并发连接数量,避免连接耗尽。建议每次克隆session后,务必调用Close方法释放连接,确保连接池的有效利用。
摘要由CSDN通过智能技术生成

本文参考自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() 释放连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值