mirror of
https://gitee.com/johng/gf
synced 2026-06-07 02:12:11 +08:00
gdb增加MaxIdleConnCount/MaxOpenConnCount/MaxConnLifetime三项配置,并增加SetMaxConnLifetime方法
This commit is contained in:
@ -18,6 +18,7 @@ import (
|
||||
"gitee.com/johng/gf/g/container/gring"
|
||||
"gitee.com/johng/gf/g/os/gcache"
|
||||
"gitee.com/johng/gf/g/container/gmap"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -49,6 +50,7 @@ type Link interface {
|
||||
// 连接属性设置
|
||||
SetMaxIdleConns(n int)
|
||||
SetMaxOpenConns(n int)
|
||||
SetConnMaxLifetime(d time.Duration)
|
||||
|
||||
// 开启事务操作
|
||||
Begin() (*Tx, error)
|
||||
@ -229,6 +231,16 @@ func newDb (masterNode *ConfigNode, slaveNode *ConfigNode, groupName string) (*D
|
||||
charr : link.getQuoteCharRight(),
|
||||
debug : gtype.NewBool(),
|
||||
}
|
||||
// 设置连接属性,master和slave必须是一致的,所以这里使用的是master的属性设置
|
||||
if masterNode.MaxIdleConnCount > 0 {
|
||||
db.SetMaxIdleConns(masterNode.MaxIdleConnCount)
|
||||
}
|
||||
if masterNode.MaxOpenConnCount > 0 {
|
||||
db.SetMaxOpenConns(masterNode.MaxOpenConnCount)
|
||||
}
|
||||
if masterNode.MaxConnLifetime > 0 {
|
||||
db.SetConnMaxLifetime(time.Duration(masterNode.MaxConnLifetime)*time.Second)
|
||||
}
|
||||
if v := dbCaches.Get(groupName); v == nil {
|
||||
dbCaches.LockFunc(func(m map[string]interface{}) {
|
||||
if v, ok := m[groupName]; !ok {
|
||||
|
||||
@ -17,6 +17,7 @@ import (
|
||||
"gitee.com/johng/gf/g/util/gconv"
|
||||
"gitee.com/johng/gf/g/container/gring"
|
||||
"gitee.com/johng/gf/g/os/gtime"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -237,24 +238,42 @@ func (db *Db) Prepare(query string) (*sql.Stmt, error) {
|
||||
|
||||
// ping一下,判断或保持数据库链接(master)
|
||||
func (db *Db) PingMaster() error {
|
||||
err := db.master.Ping();
|
||||
err := db.master.Ping()
|
||||
return err
|
||||
}
|
||||
|
||||
// ping一下,判断或保持数据库链接(slave)
|
||||
func (db *Db) PingSlave() error {
|
||||
err := db.slave.Ping();
|
||||
err := db.slave.Ping()
|
||||
return err
|
||||
}
|
||||
|
||||
// 设置数据库连接池中空闲链接的大小
|
||||
func (db *Db) SetMaxIdleConns(n int) {
|
||||
db.master.SetMaxIdleConns(n);
|
||||
db.master.SetMaxIdleConns(n)
|
||||
// 比较的是指向的变量地址
|
||||
if db.master != db.slave {
|
||||
db.slave.SetMaxIdleConns(n)
|
||||
}
|
||||
}
|
||||
|
||||
// 设置数据库连接池最大打开的链接数量
|
||||
func (db *Db) SetMaxOpenConns(n int) {
|
||||
db.master.SetMaxOpenConns(n);
|
||||
db.master.SetMaxOpenConns(n)
|
||||
// 比较的是指向的变量地址
|
||||
if db.master != db.slave {
|
||||
db.slave.SetMaxOpenConns(n)
|
||||
}
|
||||
}
|
||||
|
||||
// 设置数据库连接可重复利用的时间,超过该时间则被关闭废弃
|
||||
// 如果 d <= 0 表示该链接会一直重复利用
|
||||
func (db *Db) SetConnMaxLifetime(d time.Duration) {
|
||||
db.master.SetConnMaxLifetime(d)
|
||||
// 比较的是指向的变量地址
|
||||
if db.master != db.slave {
|
||||
db.slave.SetConnMaxLifetime(d)
|
||||
}
|
||||
}
|
||||
|
||||
// 事务操作,开启,会返回一个底层的事务操作对象链接如需要嵌套事务,那么可以使用该对象,否则请忽略
|
||||
|
||||
@ -30,16 +30,19 @@ type ConfigGroup []ConfigNode
|
||||
|
||||
// 数据库单项配置
|
||||
type ConfigNode struct {
|
||||
Host string // 地址
|
||||
Port string // 端口
|
||||
User string // 账号
|
||||
Pass string // 密码
|
||||
Name string // 数据库名称
|
||||
Type string // 数据库类型:mysql, sqlite, mssql, pgsql, oracle(目前仅支持mysql)
|
||||
Role string // (可选,默认为master)数据库的角色,用于主从操作分离,至少需要有一个master,参数值:master, slave
|
||||
Charset string // (可选,默认为 utf8)编码,默认为 utf8
|
||||
Priority int // (可选)用于负载均衡的权重计算,当集群中只有一个节点时,权重没有任何意义
|
||||
Linkinfo string // (可选)自定义链接信息,当该字段被设置值时,以上链接字段(Host,Port,User,Pass,Name)将失效(该字段是一个扩展功能)
|
||||
Host string // 地址
|
||||
Port string // 端口
|
||||
User string // 账号
|
||||
Pass string // 密码
|
||||
Name string // 数据库名称
|
||||
Type string // 数据库类型:mysql, sqlite, mssql, pgsql, oracle(目前仅支持mysql)
|
||||
Role string // (可选,默认为master)数据库的角色,用于主从操作分离,至少需要有一个master,参数值:master, slave
|
||||
Charset string // (可选,默认为 utf8)编码,默认为 utf8
|
||||
Priority int // (可选)用于负载均衡的权重计算,当集群中只有一个节点时,权重没有任何意义
|
||||
Linkinfo string // (可选)自定义链接信息,当该字段被设置值时,以上链接字段(Host,Port,User,Pass,Name)将失效(该字段是一个扩展功能)
|
||||
MaxIdleConnCount int // (可选)连接池最大限制的连接数
|
||||
MaxOpenConnCount int // (可选)连接池最大打开的连接数
|
||||
MaxConnLifetime int // (可选,单位秒)连接对象可重复使用的时间长度
|
||||
}
|
||||
|
||||
// 数据库集群配置示例,支持主从处理,多数据库集群支持
|
||||
|
||||
9
g/g.go
9
g/g.go
@ -107,6 +107,15 @@ func Database(name...string) *gdb.Db {
|
||||
if value, ok := nodem["priority"]; ok {
|
||||
node.Priority = gconv.Int(value)
|
||||
}
|
||||
if value, ok := nodem["max-idle"]; ok {
|
||||
node.MaxIdleConnCount = gconv.Int(value)
|
||||
}
|
||||
if value, ok := nodem["max-open"]; ok {
|
||||
node.MaxOpenConnCount = gconv.Int(value)
|
||||
}
|
||||
if value, ok := nodem["max-lifetime"]; ok {
|
||||
node.MaxConnLifetime = gconv.Int(value)
|
||||
}
|
||||
cg = append(cg, node)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user