如何通过编程方式将连接归还至deadpool-postgres连接池?
deadpool-postgres 主动归还/释放连接的实现方案
有两种对应不同需求的编程实现方案:
方案1:主动将连接归还到连接池复用
deadpool_postgres::Client本质是带引用计数的智能指针,只要销毁所有该对象的所有者,连接就会自动归还到池,不需要等待变量出作用域的两种实现:
- 直接调用标准库的
drop方法主动丢弃连接对象:
示例代码:drop(client);
执行后连接会被立即归还到连接池,可被其他请求复用。 - 如果你需要剥离连接与连接池的绑定关系,可以调用
Object的take()方法取出内部的原生postgres连接,原智能指针失效后对应的池插槽会被直接标记为可用,取出的连接可由你自行管理生命周期。
方案2:主动销毁连接,不回流到连接池
如果连接出现事务异常、网络异常等状态不正常的情况,不希望它被放回连接池复用,可以调用连接的close方法主动销毁:
- 示例代码:
client.close().await?; - 执行后连接会被直接关闭释放资源,不会再回到连接池中。
注意:常规场景下不需要手动操作连接生命周期,
Client对象离开作用域后会自动归还连接到池。手动操作仅适合提前释放连接的场景:比如拿到连接后需要执行一段较长时间的无数据库操作逻辑,提前归还连接可以提升连接池的利用率。
内容的提问来源于stack exchange,提问作者ferd tomale
相关产品推荐
相关产品推荐

