beego的orm模块自带连接池功能,可以通过设置MaxIdleConns、MaxOpenConns来配置连接池属性。
SetMaxOpenConns用于设置最大打开的连接数,默认值为0表示不限制。
SetMaxIdleConns用于设置闲置的连接数。
设置最大的连接数,可以避免并发太高导致连接mysql出现too many connections的错误。设置闲置的连接数则当开启的一个连接使用完成后可以放在池里等候下一次使用。
代码实例:
// InitMysql MySQL连接池 func InitMysql() { err := orm.RegisterDriver("mysql", orm.DRMySQL) if err != nil { logs.Error("initMysql", err) return } host, _ := web.AppConfig.String("mysqlHost") user, _ := web.AppConfig.String("mysqlUser") password, _ := web.AppConfig.String("mysqlPassword") db, _ := web.AppConfig.String("mysqlDB") port, _ := web.AppConfig.String("mysqlPort") pre, _ := web.AppConfig.String("mysqlPre") dataSource := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8", user, password, host, port, db) models := []interface{}{//如果使用高级查询必须注册模型 new(mysql.IpBlack), } orm.RegisterModelWithPrefix(pre, models...) err = orm.RegisterDataBase("default", "mysql", dataSource) if err != nil { logs.Error("initMysql-RegisterDataBase", err) return } orm.SetMaxIdleConns("default",50) orm.SetMaxOpenConns("default",1000) }
model:
type IpBlack struct { Id int64 `json:"id"` Ip string `json:"ip"` UserAgent string `json:"user_agent"` CreateTime string `json:"create_time"` } // Insert 添加数据 func (i *IpBlack) Insert() (id int64, err error) { o := orm.NewOrm() id, err = o.Insert(i) if err != nil { logs.Error("IpBlack", err) return 0, err } return id, nil }
使用示例:
data := &mysql.IpBlack{ Ip: ip, UserAgent: ua, CreateTime: carbon.Now().ToDateTimeString(), } _, _ = data.Insert()
2 条评论
博客很棒,希望可以交个朋友!
谢谢,朋友!