1 个不稳定版本
使用旧的 Rust 2015
0.23.3 | 2024 年 1 月 28 日 |
---|
#2779 在 数据库接口
9KB
65 代码行
r2d2-redis
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://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 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://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 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–8.5MB
~95K SLoC