猿问
写连接池。
例如,我如何为数据库编写连接。很棒的
Redis
包为缓存 redis 数据库连接提供了类型池。
如何编写这种缓存数据库连接的连接池?
慕的地10843
浏览 156
回答 1
1回答
慕姐8265434
这些是导出的字段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结构中。Poolidle
0
0
0
随时随地看视频
慕课网APP
相关分类
Go
我要回答