27 个版本 (14 个重大更改)

0.16.0 2024 年 8 月 5 日
0.15.1 2024 年 5 月 4 日
0.15.0 2024 年 3 月 31 日
0.14.0 2023 年 12 月 15 日
0.4.1 2019 年 12 月 31 日

数据库接口 中排名 #423

Download history 15908/week @ 2024-04-19 13700/week @ 2024-04-26 13619/week @ 2024-05-03 15557/week @ 2024-05-10 22214/week @ 2024-05-17 20054/week @ 2024-05-24 14619/week @ 2024-05-31 22738/week @ 2024-06-07 19391/week @ 2024-06-14 17374/week @ 2024-06-21 19995/week @ 2024-06-28 18346/week @ 2024-07-05 14524/week @ 2024-07-12 17321/week @ 2024-07-19 18167/week @ 2024-07-26 12937/week @ 2024-08-02

每月下载量 65,980
35 Crates 使用(26 个直接使用)

MIT/Apache

105KB
2K SLoC

Deadpool 是一个用于任何类型连接和对象的简单异步池。 最新版本 禁止不安全操作 Rust 1.75+

Deadpool 为连接和任何类型的对象实现了一个简单的异步池。

该 crate 实现了一个 deadpool 管理器,用于 redis

功能

功能 描述 额外依赖项 默认
rt_tokio_1 启用对 tokio crate 的支持 deadpool/rt_tokio_1redis/tokio-comp
rt_async-std_1 启用对 async-std crate 的支持 deadpool/rt_async-std_1redis/async-std-comp
serde 启用对 serde crate 的支持 deadpool/serdeserde/derive
集群 启用对 Redis 集群的支持 redis/集群-异步

示例

use std::env;

use deadpool_redis::{redis::{cmd, FromRedisValue}, Config, Runtime};

#[tokio::main]
async fn main() {
    let mut cfg = Config::from_url(env::var("REDIS__URL").unwrap());
    let pool = cfg.create_pool(Some(Runtime::Tokio1)).unwrap();
    {
        let mut conn = pool.get().await.unwrap();
        cmd("SET")
            .arg(&["deadpool/test_key", "42"])
            .query_async::<()>(&mut conn)
            .await.unwrap();
    }
    {
        let mut conn = pool.get().await.unwrap();
        let value: String = cmd("GET")
            .arg(&["deadpool/test_key"])
            .query_async(&mut conn)
            .await.unwrap();
        assert_eq!(value, "42".to_string());
    }
}

使用 configdotenvy crate 的示例

use deadpool_redis::{redis::{cmd, FromRedisValue}, Runtime};
use dotenvy::dotenv;

#[derive(Debug, serde::Deserialize)]
struct Config {
    #[serde(default)]
    redis: deadpool_redis::Config
}

impl Config {
      pub fn from_env() -> Result<Self, config::ConfigError> {
         config::Config::builder()
            .add_source(config::Environment::default().separator("__"))
            .build()?
            .try_deserialize()
    }
}

#[tokio::main]
async fn main() {
    dotenv().ok();
    let cfg = Config::from_env().unwrap();
    let pool = cfg.redis.create_pool(Some(Runtime::Tokio1)).unwrap();
    {
        let mut conn = pool.get().await.unwrap();
        cmd("SET")
            .arg(&["deadpool/test_key", "42"])
            .query_async::<()>(&mut conn)
            .await.unwrap();
    }
    {
        let mut conn = pool.get().await.unwrap();
        let value: String = cmd("GET")
            .arg(&["deadpool/test_key"])
            .query_async(&mut conn)
            .await.unwrap();
        assert_eq!(value, "42".to_string());
    }
}

集群示例

use std::env;
use deadpool_redis::{redis::{cmd, FromRedisValue}};
use deadpool_redis::cluster::{Config, Runtime};

#[tokio::main]
async fn main() {
    let redis_urls = env::var("REDIS_CLUSTER__URLS")
        .unwrap()
        .split(',')
        .map(String::from)
        .collect::<Vec<_>>();
    let mut cfg = Config::from_urls(redis_urls);
    let pool = cfg.create_pool(Some(Runtime::Tokio1)).unwrap();
    {
        let mut conn = pool.get().await.unwrap();
        cmd("SET")
            .arg(&["deadpool/test_key", "42"])
            .query_async::<()>(&mut conn)
            .await.unwrap();
    }
    {
        let mut conn = pool.get().await.unwrap();
        let value: String = cmd("GET")
            .arg(&["deadpool/test_key"])
            .query_async(&mut conn)
            .await.unwrap();
        assert_eq!(value, "42".to_string());
    }
}

使用 configdotenvy crate 的示例

use deadpool_redis::redis::{cmd, FromRedisValue};
use deadpool_redis::cluster::{Runtime};
use dotenvy::dotenv;

#[derive(Debug, serde::Deserialize)]
struct Config {
    #[serde(default)]
    redis_cluster: deadpool_redis::cluster::Config
}

impl Config {
      pub fn from_env() -> Result<Self, config::ConfigError> {
         config::Config::builder()
            .add_source(
                config::Environment::default()
                .separator("__")
                .try_parsing(true)
                .list_separator(","),
            )
            .build()?
            .try_deserialize()
    }
}

#[tokio::main]
async fn main() {
    dotenv().ok();
    let cfg = Config::from_env().unwrap();
    let pool = cfg.redis_cluster.create_pool(Some(Runtime::Tokio1)).unwrap();
    {
        let mut conn = pool.get().await.unwrap();
        cmd("SET")
            .arg(&["deadpool/test_key", "42"])
            .query_async::<()>(&mut conn)
            .await.unwrap();
    }
    {
        let mut conn = pool.get().await.unwrap();
        let value: String = cmd("GET")
            .arg(&["deadpool/test_key"])
            .query_async(&mut conn)
            .await.unwrap();
        assert_eq!(value, "42".to_string());
    }
}

常见问题解答

  • 如何启用 redis crate 的功能?

    请确保您依赖与redisdeadpool-redis相同的版本,并在自己的Crate.toml文件中启用所需的功能

    [dependencies]
    deadpool-redis = { version = "0.9", features = ["serde"] }
    redis = { version = "0.21", default-features = false, features = ["tls"] }
    

许可证

根据以下任一许可证授权

任选其一。

依赖关系

约7-18MB
~263K SLoC