Beego MySQL连接池

Jackey Golang 1,997 次浏览 , , 2条评论

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 条评论

  1. 自媒体运营 2021年12月9日 下午1:37 回复

    博客很棒,希望可以交个朋友!

    • Jackey 2021年12月9日 下午1:40 回复

      谢谢,朋友!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Go