42个发布版本
0.8.10 | 2022年6月21日 |
---|---|
0.8.9 | 2020年6月30日 |
0.8.8 | 2019年12月25日 |
0.8.7 | 2019年11月26日 |
0.1.0 | 2014年11月23日 |
#12 in 数据库接口
350,778 每月下载量
用于 470 个Crate (260 个直接使用)
58KB
1.5K SLoC
r2d2
Rust的泛型连接池。
每次需要时都打开一个新的数据库连接既低效,又在高流量条件下可能导致资源耗尽。连接池维护一组到数据库的打开连接,并将它们分配给重复使用。
r2d2对它所管理的连接类型一无所知。实现ManageConnection
特质的实现者提供创建和检查连接健康状况的特定数据库逻辑。
不同后端适配器的(可能不完整的)列表
后端 | 适配器Crate |
---|---|
rust-postgres | r2d2-postgres |
redis-rs | 使用 redis-rs 的 r2d2 功能 |
rust-memcache | r2d2-memcache |
rust-mysql-simple | r2d2-mysql |
rusqlite | r2d2-sqlite |
rsfbclient | r2d2-firebird |
rusted-cypher | r2d2-cypher |
diesel | diesel::r2d2 (文档) |
couchdb | r2d2-couchdb |
mongodb (存档) 请使用官方的 mongodb 驱动程序 |
r2d2-mongodb (已弃用:官方驱动程序内部处理池化) |
odbc | r2d2-odbc |
jfs | r2d2-jfs |
oracle | r2d2-oracle |
ldap3 | r2d2-ldap |
duckdb-rs | 使用 duckdb-rs 的 r2d2 功能 |
示例
使用一个假设的 "foodb" 数据库。
use std::thread;
extern crate r2d2;
extern crate r2d2_foodb;
fn main() {
let manager = r2d2_foodb::FooConnectionManager::new("localhost:1234");
let pool = r2d2::Pool::builder()
.max_size(15)
.build(manager)
.unwrap();
for _ in 0..20 {
let pool = pool.clone();
thread::spawn(move || {
let conn = pool.get().unwrap();
// use the connection
// it will be returned to the pool when it falls out of scope.
})
}
}
许可证
许可协议为以下之一
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确表示,否则你提交的任何贡献都将按照上述方式双重许可,没有任何额外的条款或条件。
依赖关系
~0.5–6MB
~13K SLoC