#redis-cluster #async-pool #pool #async #serde-default

deadpool-redis-cluster

Redis Cluster 简单异步连接池

2 个版本

0.1.1 2023年12月14日
0.1.0 2023年9月26日

数据库接口 中排名 2491

MIT/Apache

94KB
1.5K SLoC

Redis Cluster 的 Deadpool 最新版本 禁止不安全操作 Rust 1.63+

⚠️ 已弃用!⚠️

该功能已被合并到 redis crate,因此此crate已弃用。

请使用 deadpool-redis 代替。

⚠️ 已弃用!⚠️

Deadpool 是一个用于任何类型连接和对象的不复杂异步连接池。

此crate实现了一个用于 redis-cluster 的管理器。

功能

功能 描述 额外依赖 默认
rt_tokio_1 启用对 tokio crate 的支持 deadpoolredis-clusterserde
rt_async-std_1 启用对 async-std crate 的支持 deadpoolredis-clusterserde
serde 启用对 serde crate 的支持 deadpoolredis-cluster

示例

use std::env;
use deadpool_redis_cluster::{redis::{cmd, FromRedisValue}, 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());
    }
}

示例使用 configdotenv crate

use deadpool_redis_cluster::{redis::{cmd, FromRedisValue}, Runtime};
use dotenv::dotenv;
# use serde_1 as serde;

#[derive(Debug, serde::Deserialize)]
# #[serde(crate = "serde_1")]
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());
    }
}

FAQ

  • 如何启用 redis crate 的功能?

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

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

许可证

根据以下任一许可证授权

您可选择。

依赖

~7–21MB
~286K SLoC