actix-web使用redis连接池



我在actix-web 4使用redis

actix-web = "4"
redis = { version = "0.21", features = ["r2d2", "cluster", "connection-manager", "tokio-comp", "tokio-native-tls-comp"] }

我在主目录

创建了redis客户端

#[actix_web::main]
async fn main() -> std::io::Result<()> {
let redis_client = redis::Client::open("redis://127.0.0.1:6379/").expect("err");
let serve = HttpServer::new(move || {
App::new()
.app_data(web::Data::new(redis_client.clone()))
});
}

然后在路由

中获取这个redis客户端
pub async fn list(
query: web::Query<ListRequest>,
redis_client: web::Data<redis::Client>,
) -> HttpResult {
let mut con = redis_client.get_tokio_connection().await.map_err(hje)?;
let _: () = con.set("my_key", 42).await.map_err(hje)?;
}

上面的代码工作得很好,但我想知道如何使用r2d2来创建一个redis连接池而不是单个连接

我在文档中发现可以支持r2d2,但是我不知道如何使用,你能帮助我吗?

"r2d2"特性将为redis::Client实现r2d2::ManageConnection,这意味着您可以创建一个这样的池:

r2d2::Pool::new(redis_client).unwrap();

最新更新