mongo connect error no reachable servers

在使用Go的mgo库操作MongoDB时遇到批量插入异常,问题源于每次插入都新建session。解决方案是利用session的Copy()方法创建连接池,以提升性能并避免资源浪费。文中介绍了正确使用session的方法,包括在函数中获取session的优化方式以及设置连接池的策略。
摘要由CSDN通过智能技术生成

使用mgo操作mongo时遇到了上述的异常,原因是session的使用失败。

func foo(){
  session ,_ := mgo.Dial("mongodb://127.0.0.1")
  defer s.Close()
	session.DB("test").C("coll").Insert(bson.M{"name":"zhangsan"})
}

上述的函数,调用一次是能够插入成功的,但是循环1000次调用该函数就会抛出异常

mongo connect error no reachable servers

原因是每次插入都要取获取一个session,实际上mgo的session不能够这样使用,应该使用session的一个拷贝,退出时关闭临时的session

func GetSession() *mgo.Session {
	if session == nil {
		session, err := mgo.Dial(URL)
		if err != nil {
			log.Println("mongo connect error", err)
			panic(err)
		}
		session.SetMode(mgo.SecondaryPreferred, true)
	}
	return session.Copy()
}

当然也可以为session设置一个连接池

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值