#连接池 #async-await # #await #async #数据库

mobc-forked

支持异步/await 的通用连接池

5 个版本

0.7.4-alpha.42023年7月22日
0.7.4-alpha.32023年7月16日
0.7.3 2023年3月10日

#1506异步

Download history 24/week @ 2024-04-01 50/week @ 2024-04-08 5/week @ 2024-04-15 37/week @ 2024-04-22 54/week @ 2024-04-29 59/week @ 2024-05-06 114/week @ 2024-05-13 23/week @ 2024-05-20 15/week @ 2024-05-27 21/week @ 2024-06-03 64/week @ 2024-06-10 22/week @ 2024-06-17 16/week @ 2024-06-24 7/week @ 2024-07-01 1/week @ 2024-07-08 26/week @ 2024-07-15

53 每月下载量
用于 quaint-forked

MIT/Apache

48KB
925

Mobc Forked

这是对原始 Mobc 的分支,修复了稳定性问题。这改变了 Mobc 的设计,使用信号量来管理池,而不是原始设计使用的通道。

支持异步/await 的通用连接池。

灵感来源于 Deadpool、Sqlx、r2d2 和 Golang SQL 包。

变更日志

注意:mobc 至少需要 Rust 1.39。

用法

[dependencies]
mobc = { git = "https://github.com/prisma/mobc",  branch = "main"}

# For async-std runtime
# mobc = { git = "https://github.com/prisma/mobc", features = ["async-std"] }

# For actix-rt 1.0
# mobc = { git = "https://github.com/prisma/mobc", features = ["actix-rt"] }

特性

  • 支持 async/.await 语法
  • 支持 tokioasync-std
  • 高性能
  • 易于定制
  • 动态配置

适配器

后端 适配器 Crate
tokio-postgres mobc-postgres
redis mobc-redis
arangodb mobc-arangors
lapin mobc-lapin
reql mobc-reql
redis-cluster mobc-redis-cluster

欢迎更多数据库适配器。

示例

更多 示例

使用一个虚构的 "foodb" 数据库。

use mobc::{async_trait, Manager};

#[derive(Debug)]
pub struct FooError;

pub struct FooConnection;

impl FooConnection {
    pub async fn query(&self) -> String {
        "PONG".to_string()
    }
}

pub struct FooManager;

#[async_trait]
impl Manager for FooManager {
    type Connection = FooConnection;
    type Error = FooError;

    async fn connect(&self) -> Result<Self::Connection, Self::Error> {
        Ok(FooConnection)
    }

    async fn check(&self, conn: Self::Connection) -> Result<Self::Connection, Self::Error> {
        Ok(conn)
    }
}

配置

max_open

设置池管理的最大连接数。

0 表示无限,默认为 10。

min_idle

设置池维护的最大空闲连接数。池将始终维护最多此数量的空闲连接,同时尊重 max_open 的值。

max_lifetime

设置池中连接的最大生命周期。过期的连接在复用之前可能会被懒惰地关闭。

None 表示永远复用,默认为 None。

get_timeout

设置连接池使用的获取超时。调用 Pool::get 会在返回错误之前等待这么长时间,直到可用连接出现。

无表示永不超时,默认为30秒。

变量

一些连接池配置可以动态调整。每个连接池实例都有以下方法

  • set_max_open_conns
  • set_max_idle_conns
  • set_conn_max_lifetime

统计

  • max_open - 数据库的最大打开连接数。
  • connections - 正在使用和空闲的已建立连接数。
  • in_use - 当前正在使用的连接数。
  • idle - 空闲连接数。
  • wait_count - 等待连接的总次数。
  • wait_duration - 等待新连接的总阻塞时间。
  • max_idle_closed - 由于 max_idle 而关闭的总连接数。
  • max_lifetime_closed - 由于 max_lifetime 而关闭的总连接数。

兼容性

由于 tokio 与其他运行时(如 async-std)不兼容,因此使用 tokio 编写的数据库驱动程序不能在 async-std 运行时中运行。例如,由于它使用 tokio,因此不能在 tide 中使用 redis-rs,因此基于 redis-res 的连接池也不能在 tide 中使用。

依赖项

~5–20MB
~233K SLoC