1 回答
TA贡献1813条经验 获得超2个赞
这些是导出的字段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 连接池管理的实际连接集保存在's字段的list.List
结构中。Pool
idle
- 1 回答
- 0 关注
- 155 浏览
添加回答
举报