【发布时间】:2014-12-10 17:01:59
【问题描述】:
我想要一个具有最大连接数的 Redis 数据库连接池。看起来Lwt_pool 是我正在寻找的解决方案,但我不太了解它应该如何工作。例如,我有一些问题:
文档谈到
Lwt_pool非常适合重用打开的连接,但池如何知道哪些连接可重用?据我所知,没有特别的方式来表明这一点,API 只提供use方法。有没有比
Lwt文档更好的资源来了解它的工作原理?我无法轻易找到代码示例或许多可用资源。
【问题讨论】:
我想要一个具有最大连接数的 Redis 数据库连接池。看起来Lwt_pool 是我正在寻找的解决方案,但我不太了解它应该如何工作。例如,我有一些问题:
文档谈到 Lwt_pool 非常适合重用打开的连接,但池如何知道哪些连接可重用?据我所知,没有特别的方式来表明这一点,API 只提供use 方法。
有没有比Lwt 文档更好的资源来了解它的工作原理?我无法轻易找到代码示例或许多可用资源。
【问题讨论】:
传递给use 的函数返回一个线程。当线程结束时,连接被释放回池中。
源代码相当容易阅读。在这种情况下:
let use p f =
acquire p >>= fun c ->
Lwt.catch
(fun () ->
let t = f c in
t >>= fun _ ->
release p c;
t)
(fun e ->
checked_release p c;
Lwt.fail e)
【讨论】: