14个重大版本

使用旧的Rust 2015

0.14.0 2021年2月28日
0.13.0 2020年2月17日
0.12.0 2019年10月16日
0.10.1 2019年7月19日
0.1.0 2015年6月29日

#1185 in 数据库接口

Download history 2500/week @ 2024-03-14 2189/week @ 2024-03-21 1981/week @ 2024-03-28 2502/week @ 2024-04-04 2387/week @ 2024-04-11 2014/week @ 2024-04-18 1946/week @ 2024-04-25 1855/week @ 2024-05-02 1514/week @ 2024-05-09 2028/week @ 2024-05-16 1822/week @ 2024-05-23 1891/week @ 2024-05-30 1032/week @ 2024-06-06 1297/week @ 2024-06-13 1124/week @ 2024-06-20 822/week @ 2024-06-27

4,540 每月下载量
用于 26 个crate(21个直接使用)

MIT 许可证

6KB
65

r2d2-redis

travis-ci.org MIT licensed Documentation

redis-rs 是一个用于 r2d2 连接池的支持库,完全基于 Steven Fackler 的 r2d2-postgres。所有荣誉都归他。

文档可在 此处 查看。

r2d2-redis 最初由 @nevdelap 开发,由于没有足够的时间维护,他已经将仓库迁移到这里。感谢你所有的辛勤工作,@nevdelap

用法

将此内容添加到您的 Cargo.toml

[dependencies]
r2d2_redis = "0.14.0"

然后查看下面的示例。

示例

请参阅 示例 以获取可运行的示例。

标准用法

此示例展示了使用 redis::Commands 提供的便捷方法的典型用例。您会注意到它几乎与直接使用 redis crate 相同。多亏了 Deref 特性,您可以直接在连接池的连接上调用任何 Connection 方法。

使用 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://127.0.0.1").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 mut conn = pool.get().unwrap();
            let n: i64 = conn.incr("counter", 1).unwrap();
            println!("Counter increased to {}", n);
        }));
    }

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

手动查询构建

不幸的是,有些情况下无法使用 Deref 特性。这通常发生在您需要将 Redis 连接传递到其他地方时,例如手动构建查询和/或 Redis crate 没有公开特定命令的便捷方法(例如 PING)。在这些情况下,您必须直接使用并调用 Deref 特性。

使用 cargo run --example ping

extern crate r2d2_redis;

use std::ops::DerefMut;
use std::thread;

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

fn main() {
    let manager = RedisConnectionManager::new("redis://127.0.0.1").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 mut conn = pool.get().unwrap();
            let reply = redis::cmd("PING").query::<String>(conn.deref_mut()).unwrap();
            // Alternatively, without deref():
            // let reply = redis::cmd("PING").query::<String>(&mut *conn).unwrap();
            assert_eq!("PONG", reply);
        }));
    }

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

依赖关系

约3.5–9.5MB
约113K SLoC