Crates.io | mobc-redis |
lib.rs | mobc-redis |
version | 0.8.2 |
source | src |
created_at | 2019-10-29 10:58:18.319899 |
updated_at | 2023-11-20 11:35:17.879559 |
description | Redis support for the mobc connection pool |
homepage | |
repository | https://github.com/importcjj/mobc |
max_upload_size | |
id | 176618 |
size | 34,094 |
use mobc::Pool;
use mobc_redis::redis;
use redis::AsyncCommands;
use mobc_redis::RedisConnectionManager;
use std::time::Instant;
const TEST_KEY: &'static str = "mobc::redis::test";
#[tokio::main]
async fn main() {
let client = redis::Client::open("redis://127.0.0.1/").unwrap();
let manager = RedisConnectionManager::new(client);
let pool = Pool::builder().max_open(20).build(manager);
let mut conn = pool.get().await.unwrap();
let _: () = conn.set(TEST_KEY, "hello").await.unwrap();
const MAX: usize = 5000;
let now = Instant::now();
let (tx, mut rx) = tokio::sync::mpsc::channel::<usize>(5000);
for i in 0..MAX {
let pool = pool.clone();
let tx_c = tx.clone();
tokio::spawn(async move {
let mut conn = pool.get().await.unwrap();
let s: String = conn.get(TEST_KEY).await.unwrap();
assert_eq!(s.as_str(), "hello");
tx_c.send(i).await.unwrap();
});
}
for _ in 0..MAX {
rx.recv().await.unwrap();
}
println!("cost: {:?}", now.elapsed());
}
You can use either tokio, or async-std as your async runtime.
The default is tokio-comp
, but you can use async-std
by setting it in the mobc-redis
features.
mobc-redis = { version = "0.7", default-features = false, features = ["async-std-comp"] }