这些是以下内容的导出字段redis.Pool
:
type Pool struct {
Dial func() (Conn, error)
TestOnBorrow func(c Conn, t time.Time) error
MaxIdle int
MaxActive int
IdleTimeout time.Duration
}
Dial
需要以按需创建新连接。也就是说,当池将所有连接借出后,从池中请求一个新连接。TestOnBorrow
在将连接借给用户之前将检查连接的运行状况。如果返回错误,将创建一个新连接(使用Dial
),并且旧连接将被关闭/丢弃。MaxIdle
是池中包含的未借出连接的数量。如果一个池Dial
有这么多连接,它将不会创建任何新连接(通过)。MaxActive
是池在任何给定时间将管理的总连接数。借出和未借出的连接。IdleTimeout
是一个持续时间,在此期间,一直处于未借出状态的池中的连接将被关闭,而新连接将被打开。我使用“借贷”一词而不是“借入”一词,因为数据流向(谁提供和谁消费)更清晰。
要实现这样的池,您还需要包装您的连接(就像redis包一样),以便在用户调用Close()
它们时将其返回到池中。此外,每个连接上都保留一个读/写时间戳,以提供空闲超时功能。
为了能够同时使用,还需要提供连接的访问锁定和原子计数,以便您永远都不能超过最大的空闲/活动连接数。
实际组由Redis的连接池管理的连接保持在list.List
结构中Pool
的idle
字段。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句