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 |
|
#138 in 配置
403 每月下载
20KB
110 行
redis-config
作为 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