A generic connection pool for Rust
Clone or download
sfackler Merge pull request #69 from aisk/master
Add r2d2-redis to readme
Latest commit 4b50b30 Dec 22, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src Use a stack rather than queue of idle connections Sep 28, 2018
.gitignore Unify error types Nov 26, 2017
CHANGELOG.md Release v0.8.3 Nov 3, 2018
Cargo.toml Release v0.8.3 Nov 3, 2018
LICENSE-APACHE Relicense under dual MIT/Apache-2.0 Mar 29, 2016
LICENSE-MIT Bump copyright year Mar 29, 2016
README.md Add r2d2-redis to readme Dec 21, 2018
circle.yml Use official image to test Nov 23, 2017

README.md

r2d2

CircleCI

A generic connection pool for Rust.

Documentation

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 r2d2-redis
rust-memcache r2d2-memcache
rust-mysql-simple r2d2-mysql
rusqlite r2d2-sqlite
rusted-cypher r2d2-cypher
diesel diesel::r2d2 (docs)
couchdb r2d2-couchdb
mongodb r2d2-mongodb
odbc r2d2-odbc

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

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.