Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.travis
examples
scripts
src Bump to 0.9.0. Mar 27, 2019
tests Merge pull request #16 from Turbo87/reexport Aug 17, 2018
.editorconfig
.gitignore
.travis.yml
Cargo.toml Bump to 0.9.0. Mar 27, 2019
LICENSE
README.md Bump to 0.9.0. Mar 27, 2019

README.md

r2d2-redis

travis-ci.org MIT licensed crates.io Documentation

redis-rs support library for the r2d2 connection pool totally based on Steven Fackler's r2d2-postgres. All props to him.

Documentation is available here.

r2d2-redis was originally developed by @nevdelap, who has since transferred the repo here due to no longer having enough time to maintain it. Thanks for all your hard work, @nevdelap!

Usage

Add this to your Cargo.toml:

[dependencies]
r2d2_redis = "0.9.0"

Then check out the examples below.

Examples

See examples for runnable examples.

Standard usage

This example shows a standard use case with convenience methods provided by redis::Commands. You'll note that it's practically the same as if you were using the redis crate directly. Thanks to the Deref trait, you'll be able to call any Connection method directly on a pooled connection.

Run with cargo run --example counter:

extern crate r2d2_redis;

use std::thread;

use r2d2_redis::{r2d2, RedisConnectionManager};
use r2d2_redis::redis::Commands;

fn main() {
    let manager = RedisConnectionManager::new("redis://localhost").unwrap();
    let pool = r2d2::Pool::builder()
        .build(manager)
        .unwrap();

    let mut handles = vec![];

    for _i in 0..10i32 {
        let pool = pool.clone();
        handles.push(thread::spawn(move || {
            let conn = pool.get().unwrap();
            let n: i64 = conn.incr("counter", 1).unwrap();
            println!("Counter increased to {}", n);
        }));
    }

    for h in handles {
        h.join().unwrap();
    }
}

Manual query building

Unfortunately there are cases when the Deref trait cannot be used. This usually happens when you need to pass the redis connection somewhere else, such as when building queries manually and/or if the redis crate doesn't expose a convenience method for a particular command (e.g. PING). In these cases you must use and call the Deref trait directly.

Run with cargo run --example ping:

extern crate r2d2_redis;

use std::ops::Deref;
use std::thread;

use r2d2_redis::{r2d2, redis, RedisConnectionManager};

fn main() {
    let manager = RedisConnectionManager::new("redis://localhost").unwrap();
    let pool = r2d2::Pool::builder()
        .build(manager)
        .unwrap();

    let mut handles = vec![];

    for _i in 0..10i32 {
        let pool = pool.clone();
        handles.push(thread::spawn(move || {
            let conn = pool.get().unwrap();
            let reply = redis::cmd("PING").query::<String>(conn.deref()).unwrap();
            // Alternatively, without deref():
            // let reply = redis::cmd("PING").query::<String>(&*conn).unwrap();
            assert_eq!("PONG", reply);
        }));
    }

    for h in handles {
        h.join().unwrap();
    }
}
You can’t perform that action at this time.