编写连接池

zero_coding:

我该如何为数据库编写连接。很棒的软件包Redis提供了用于缓存Redis数据库连接的类型池。

我该如何编写这种用于缓存数据库连接的连接池?

这些是以下内容的导出字段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结构中Poolidle字段。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章