#redis #configuration #settings

redis_config

作为 config-rs crate 的异步源实现 Redis 源

5 个版本

0.2.2 2024 年 3 月 25 日
0.2.1 2024 年 1 月 5 日
0.1.1 2023 年 12 月 30 日
0.1.0 2023 年 10 月 10 日
0.0.0-beta-1 2023 年 10 月 7 日

#138 in 配置

Download history 131/week @ 2024-03-23 23/week @ 2024-03-30 1/week @ 2024-04-06 1/week @ 2024-05-25

403 每月下载

MIT 许可证

20KB
110

redis-config

Crates.io Rust Crates.io Docs.rs CI codecov

作为 config-rs crate 的异步源实现 Redis 源。

redis-config 扩展了由 config-rs 提供的可能源列表,并使用 redis-rs 提供了异步 RedisSource 源。

RedisSource 支持

  • 使用 HGETALL 命令从 Hash 读取配置
  • 使用 GET 命令从 String 读取配置
特性

redis-rs 中定义了一些特性,如果需要可以启用额外的功能。其中一些默认开启。

  • ahash: 启用 ahash map/set 支持 & 在内部使用 ahash (+7-10% 性能) (可选)
  • tokio-comp: 启用对 tokio 运行时的支持 (默认开启)
  • async-std-comp: 启用对 async-std 运行时的支持 (可选)
Tls 特性
  • async-std-native-tls-comp: 启用对 async-std 的 native-tls 支持 (可选)
  • async-std-rustls-comp: 启用对 async-std 的 rustls 支持 (可选)
  • tokio-native-tls-comp: 启用对 tokio 的 native-tls 支持 (可选)
  • tokio-rustls-comp: 启用对 tokio 的 rustls 支持 (可选)。

请参阅示例以获取一般用法信息。

用法

依赖关系

# Cargo.toml

[dependencies]
config = "0.13.3"
redis_config = { version = "*", features = ["tokio-comp"]}
tokio = { version = "1", features = ["rt", "macros", "rt-multi-thread"] }
serde = { version = "1.0", features = ["derive"]}

用法示例

 use config::builder::AsyncState;
 use redis_config::{states, RedisSource};

 // hardcoded values, shouldn't be in production
 const REDIS_URL: &str = "redis://127.0.0.1:6379";
 const SOURCE_KEY: &str = "application-settings";

 #[derive(Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone)]
 struct ServerSettings {
     ttl: i64,
     path: String,
     // another settings
     // ...
 }

 #[derive(Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq)]
 struct DbSettings {
     pool_size: usize,
     // another settings
     // ...
 }

 #[derive(Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq)]
 struct ApplicationSettings {
     // settings that will be taken from RedisSource
     server: ServerSettings,
     // settings that will be taken from Env
     db: DbSettings,
 }

 async fn get_config() -> Result<ApplicationSettings, config::ConfigError> {
     let config = config::ConfigBuilder::<AsyncState>::default()
         .add_source(
             config::Environment::with_prefix("APP")
                 .separator("__")
                 .try_parsing(true),
         )
         .add_async_source(
             RedisSource::<_, states::PlainString>::try_new(SOURCE_KEY, REDIS_URL)
                 .map_err(|err| config::ConfigError::NotFound(err.to_string()))?,
         )
         .build()
         .await?;

     config.try_deserialize()
 }

 #[tokio::main]
 async fn main() {
     let config = get_config().await.unwrap();
 }

更多

请参阅 文档 以获取更多信息。

许可证

redis_config 主要在 MIT 许可证的条款下分发。

请参阅 LICENSE 以获取详细信息。

依赖关系

~8–21MB
~321K SLoC