内容简介:在database库下清除过期连接时,使用了如下的代码逻辑。其中freeConn是空闲连接池,d是连接可被重复使用的最长时间,nowFunc返回的是当前时间。最新生成的连接在freeConn的末尾,而清除的过程则是使用最新的、次新的连接依次替换最早过期的、次早过期的连接。在for循环中直接使用len来获取总计数,在循环体内部将freeConn末尾的值替换首部的值,并将freeConn的len长度减去1。最后还做了slice中首部和尾部数据的交换过程,以及每次通过
清除无效连接
在database库下清除过期连接时,使用了如下的代码逻辑。其中freeConn是空闲连接池,d是连接可被重复使用的最长时间,nowFunc返回的是当前时间。最新生成的连接在freeConn的末尾,而清除的过程则是使用最新的、次新的连接依次替换最早过期的、次早过期的连接。
在for循环中直接使用len来获取总计数,在循环体内部将freeConn末尾的值替换首部的值,并将freeConn的len长度减去1。最后还做了 i—
操作,重复校验了一次。
expiredSince := nowFunc().Add(-d) var closing []*driverConn for i := 0; i < len(db.freeConn); i++ { c := db.freeConn[i] if c.createdAt.Before(expiredSince) { closing = append(closing, c) last := len(db.freeConn) - 1 db.freeConn[i] = db.freeConn[last] db.freeConn[last] = nil db.freeConn = db.freeConn[:last] i-- } }
参考点
slice中首部和尾部数据的交换过程,以及每次通过 i--
达到的重复校验的思路。
间隔执行
清除无效连接的工作是由一个goroutine在后台完成的,下面是截取的部分代码。for循环内部是处理连接的具体实现。每次清除操作完成后,通过Reset来重置Timer。
func (db *DB) connectionCleaner(d time.Duration) { const minInterval = time.Second if d < minInterval { d = minInterval } t := time.NewTimer(d) for { select { case <-t.C: case <-db.cleanerCh: // maxLifetime was changed or db was closed. } if d < minInterval { d = minInterval } t.Reset(d) } }
参考点
学习NewTimer函数的使用,它在声明后仅仅执行一次。通过Reset来重新使他生效。这样可以忽略操作执行的具体时间,每次都在上次操作完成后,间隔固定时间,再执行下一次操作。
还可以对比NewTicker做比较。
获取连接
从freeConn中获取一个缓存的连接,拿到连接之后并将它从freeConn中移除。同时,校验连接是否已经超过最大连接使用时间。
if strategy == cachedOrNewConn && numFree > 0 { conn := db.freeConn[0] copy(db.freeConn, db.freeConn[1:]) db.freeConn = db.freeConn[:numFree-1] conn.inUse = true db.mu.Unlock() if conn.expired(lifetime) { conn.Close() return nil, driver.ErrBadConn } return conn, nil }
参考点
使用copy对slice的第一个元素进行移除。同时,通过重新赋值来修改slice的len属性。
以上所述就是小编给大家介绍的《database package》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
网络是怎样连接的
[日]户根勤 / 周自恒 / 人民邮电出版社 / 2017-1-1 / CNY 49.00
本书以探索之旅的形式,从在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,以图配文,讲解了网络的全貌,并重点介绍了实际的网络设备和软件是如何工作的。目的是帮助读者理解网络的本质意义,理解实际的设备和软件,进而熟练运用网络技术。同时,专设了“网络术语其实很简单”专栏,以对话的形式介绍了一些网络术语的词源,颇为生动有趣。 本书图文并茂,通俗易懂,非常适合计算机、网络爱好者及相关从......一起来看看 《网络是怎样连接的》 这本书的介绍吧!
HEX CMYK 转换工具
HEX CMYK 互转工具
HSV CMYK 转换工具
HSV CMYK互换工具