当前位置: 首页 > news >正文

网站建设类的手机软件网络优化工程师主要做什么

网站建设类的手机软件,网络优化工程师主要做什么,黄江网站建设,seo指的是什么目录测试1go 1.15.15go 1.17.12测试2go 1.15.15go 1.17.12参考在使用golang 连接 mysql时,为了节省连接资源,在连接使用过后,希望在指定长度时间不再使用后,自动关闭连接。 这时,经常会使用SetConnMaxLifetime()&#…

目录

  • 测试1
    • go 1.15.15
    • go 1.17.12
  • 测试2
    • go 1.15.15
    • go 1.17.12
  • 参考

在使用golang 连接 mysql时,为了节省连接资源,在连接使用过后,希望在指定长度时间不再使用后,自动关闭连接。
这时,经常会使用SetConnMaxLifetime(),设置最大连接有效时间,
使用SetConnMaxIdleTime(),设置最大空闲连接时间 max idle time。

这两个函数的作用听起来差不多,理论上,都能达到相同效果。
但是在实际使用中,却有些出人意料。

首先看下测试代码,在以下代码中,
设置 max idle time 为传入的参数值,
设置 max life time 为传入的参数值,
设置 max open conn 为1,
设置 max idle conn 为1

package mainimport ("database/sql""log""fmt""os""strconv""time"_ "github.com/go-sql-driver/mysql"
)var dataBase = "root:xxxx@tcp(127.0.0.1:3306)/mysql?timeout=2s&readTimeout=6s&interpolateParams=true"func getVar(name string) int {val := os.Getenv(name)if len(val) == 0 {panic(fmt.Sprintf("error getting: %v", name))}v, err := strconv.Atoi(val)if err != nil {panic(fmt.Sprintf("error parsing %v %v", name, err))}return v
}func main() {db, err :=sql.Open("mysql", dataBase)  // connect to the db of your choice.if err != nil {panic(err)}defer db.Close()db.SetConnMaxIdleTime(time.Second * time.Duration(getVar("MAXIDLE")))db.SetConnMaxLifetime(time.Second * time.Duration(getVar("MAXLIFE")))db.SetMaxIdleConns(1)db.SetMaxOpenConns(1)sleep := time.Second*time.Duration(getVar("SLEEP"))for i := 0; i < 10; i++ {err = db.Ping()if err != nil {log.Fatalln("ping db fail:", err)}time.Sleep(sleep)print("\r", i)}fmt.Printf("\n%+v\n", db.Stats())
}

测试1

MAXIDLE=1 MAXLIFE=0 SLEEP=5 go run .

设置 max idle time 为1s,设置max life time为0s,也就是永不过期,相当于不设置life time。
每次连接之后,sleep 5s。

预期结果,循环10次,每次都会打开一个新的连接,旧的连接由于idle time到期而自动关闭。

go 1.15.15

output

9
{MaxOpenConnections:1 OpenConnections:1 InUse:0 Idle:1 WaitCount:0 WaitDuration:0s MaxIdleClosed:0 MaxIdleTimeClosed:0 MaxLifetimeClosed:0}

实际结果,只新建了一个连接,一直在使用,没有关闭连接。
也就是说设置max idle time 并没有生效。

go 1.17.12

9
{MaxOpenConnections:1 OpenConnections:0 InUse:0 Idle:0 WaitCount:0 WaitDuration:0s MaxIdleClosed:0 MaxIdleTimeClosed:10 MaxLifetimeClosed:0}

实际结果与预期相符。

测试2

MAXIDLE=1 MAXLIFE=2 SLEEP=5 go run .

设置 max idle time 为1s,设置max life time为2s,也就是idle time先到期
每次连接之后,sleep 5s。

预期结果,循环10次,每次都会打开一个新的连接,旧的连接是由于idle time到期自动关闭。

go 1.15.15

output

9
{MaxOpenConnections:1 OpenConnections:0 InUse:0 Idle:0 WaitCount:0 WaitDuration:0s MaxIdleClosed:0 MaxIdleTimeClosed:10 MaxLifetimeClosed:0}

实际结果与预期相符。

go 1.17.12

output

9
{MaxOpenConnections:1 OpenConnections:0 InUse:0 Idle:0 WaitCount:0 WaitDuration:0s MaxIdleClosed:0 MaxIdleTimeClosed:10 MaxLifetimeClosed:0}

实际结果与预期相符。

总结下,汇总以上测试结果如下表所示:

go版本是否 max idle time是否max life time空闲连接回收是否生效
go 1.15.15YNN
go 1.15.15YYY
go 1.17.12YNY
go 1.17.12YYY

在 go 1.15.15版本 或者其他相近版本中,只设置max idle time,不能自动回收空闲连接。

具体原因,可以参见 issue,或者具体查看go 源码,这应该是一个bug。

参考

database/sql: SetConnMaxIdleTime without SetConnMaxLifetime has no effect #41114

golang mysql 如何设置最大连接数和最大空闲连接数

http://www.mmbaike.com/news/39350.html

相关文章:

  • 做水产的都用什么网站搜索引擎优化课程总结
  • 昌平网站设计关键词优化报价
  • 动漫设计与制作是什么镇江搜索优化技巧
  • 网站项目名称品牌策划方案范文
  • 企业网站兰州建设费用所有关键词
  • 手机移动端网站案例夸克搜索入口
  • 怎么做lol网站百度小程序关键词优化
  • wordpress防黑客深圳债务优化公司
  • 怎样做网站漂浮如何搜索关键词热度
  • div css 网站模板郑州seo网站排名
  • 长治做网站2020 惠州seo服务
  • 网站建设 河南优化用户体验
  • 有什么做日结兼职的网站百度seo推广计划类型包括
  • 品牌建设费用包括哪些?如何进行搜索引擎的优化
  • 举例说明网络营销的方法有哪些长沙网站seo排名
  • 有哪些学校的网站做的好网站提交
  • 网站的照片上传的功能怎么做濮阳网站推广
  • 沈阳工程建设信息网站seo是什么字
  • 英文网站建设 论文百度搜索app
  • 开发游戏软件需要学什么专业百度seo外包
  • 桥头网站仿做网推和地推的区别
  • web前端开发框架优化网站价格
  • 南宁怎么做网站惠州网站营销推广
  • 网站整体运营百度搜索资源平台
  • 毕业论文wordpress整站优化提升排名
  • 阿里巴巴的网站建设百度知道网页版进入
  • 辽阳做网站公司最新seo新手教程
  • 如何做色情网站seo软件视频教程
  • 精品网站建设费用磐石网络名气青岛做网络推广的公司有哪些
  • 网站的源码十大网站平台