拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

rust redis = “0.29.1“ 有没有连接池

rust redis = “0.29.1“ 有没有连接池

redis = "0.29.1"这个 crate本身没有内置连接池。

它提供的是:

  • redis::Client:Redis 客户端
  • client.get_connection():获取单个同步连接
  • client.get_multiplexed_async_connection():获取单个异步可复用连接

这些都不是连接池。

如果你要 Rust Redis 连接池

常见做法是额外引入池化库:

库适用场景
deadpool-redis异步,推荐
bb8-redis异步
r2d2_redis同步

推荐依赖

[dependencies] redis = "0.29.1" deadpool-redis = "0.18" tokio = { version = "1", features = ["full"] }

版本号以你项目实际能编译通过为准。

连接池示例

use deadpool_redis::{Manager, Pool}; pub async fn create_redis_pool() -> Pool { let mgr = Manager::new("redis://127.0.0.1:6379/").unwrap(); Pool::builder(mgr) .max_size(16) .build() .unwrap() }

使用连接

let pool = create_redis_pool().await; let mut conn = pool.get().await.unwrap(); let _: () = redis::cmd("SET") .arg(&["foo", "bar"]) .query_async(&mut conn) .await .unwrap();

全局静态连接池写法

use deadpool_redis::{Manager, Pool}; use tokio::sync::OnceCell; static REDIS_POOL: OnceCell<Pool> = OnceCell::const_new(); pub async fn get_redis_pool() -> &'static Pool { REDIS_POOL .get_or_init(|| async { let mgr = Manager::new("redis://127.0.0.1:6379/").unwrap(); Pool::builder(mgr) .max_size(16) .build() .unwrap() }) .await }

使用:

let pool = get_redis_pool().await; let mut conn = pool.get().await.unwrap(); let _: () = redis::cmd("GET") .arg(&["foo"]) .query_async(&mut conn) .await .unwrap();

结论

redis = "0.29.1"没有自带连接池。
如果你要连接池,建议用:

deadpool-redis

然后全局维护一个Pool,每次通过pool.get().await获取连接。


需要我把数据库连接池和 Redis 连接池的配置整合成一份完整的 Cargo.toml 依赖清单吗?

返回列表