go连接数据库
选择 _ "github.com/go-sql-driver/mysql"
驱动连接数据库,重点关注以下四个参数:
1 | maxOpen // 使用 SetMaxOpenConns 函数进行配置 |
maxOpen
可以支持的最大并发连接(会话):这个值可以设置的大一些,只要不超过 my.cnf 中
max-connections
即可,默认 0 表示不限制假设 maxOpen 设置为 4,如果同时来了 5 个连接,就只能先处理 4 个,剩下 1 个在排队。
多说一句,所谓的排队等,本质上就是先(在一个 map 里)登记一下,然后守着一个 chanel 等,等正在运行的请求结束了,开始收尾了,再去 map 里查看这个请求,并往 chanel 塞上一个连接。
maxIdleConut
连接池大小:最多可以存储多少连接(会话),连接池中的连接即为长连接,设置值<=0 表示不存储连接
一个数据库操作完成后,会将连接(会话)放到连接池中;如果连接满了没有位置了,就直接关闭该连接,该连接就是短链接。
maxLifetime
连接的存活时间:注意和 my.cnf 中
wait-timeout
的区别,前者是存活时间,从该连接被创建起开始计算,不管你状态,时间到了就关闭;后者则是计算连接的 idle 时间,只有长时间处于空闲状态才会被关闭。一个连接有 idle 以及 open 两种状态,一个长期处于 idle 的连接,MySQL 服务器就会想要关掉它。
maxIdleTime
空闲(idle)连接的存活时间:该值和 my.cnf 中
wait-timeout
表示的意义一致。
如何设置?
理想的情况:尽量使用长连接,避免使用短链接
目前:峰值并发 100,日常 20-50
1 | DB.SetMaxOpenConns(100) |