- Backend
- Adaptor Crate
- rust-postgres
- r2d2-postgres
- redis-rs
- use r2d2 feature of redis-rs
- rust-memcache
- r2d2-memcache
Specs
- BackendAdaptor Crate
- rust-postgresr2d2-postgres
- redis-rsuse r2d2 feature of redis-rs
- rust-memcacher2d2-memcache
- rust-mysql-simpler2d2-mysql
- rusqliter2d2-sqlite
- rsfbclientr2d2-firebird
- rusted-cypherr2d2-cypher
- dieseldiesel::r2d2 ( docs )
- couchdbr2d2-couchdb
README
r2d2
A generic connection pool for Rust.
Opening a new database connection every time one is needed is both inefficient
and can lead to resource exhaustion under high traffic conditions. A connection
pool maintains a set of open connections to a database, handing them out for
repeated use.
r2d2 is agnostic to the connection type it is managing. Implementors of the
ManageConnection trait provide the database-specific logic to create and
check the health of connections.
A (possibly not exhaustive) list of adaptors for different backends:
| Backend | Adaptor Crate |
|---|---|
| rust-postgres | r2d2-postgres |
| redis-rs | use r2d2 feature of redis-rs |
| rust-memcache | r2d2-memcache |
| rust-mysql-simple | r2d2-mysql |
| rusqlite | r2d2-sqlite |
| rsfbclient | r2d2-firebird |
| rusted-cypher | r2d2-cypher |
| diesel | diesel::r2d2 (docs) |
| couchdb | r2d2-couchdb |
mongodb (archived)
use official mongodb driver instead | r2d2-mongodb
(deprecated: official driver handles pooling internally)
odbc | r2d2-odbc
jfs | r2d2-jfs
oracle | r2d2-oracle
ldap3 | r2d2-ldap
duckdb-rs | use r2d2 feature of duckdb-rs
Example
Using an imaginary "foodb" database.
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.
})
}
}
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you shall be dual licensed as above, without any
additional terms or conditions.