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
每月下载量 65,980
被 35 个 Crates 使用(26 个直接使用)
105KB
2K SLoC
Deadpool 是一个用于任何类型连接和对象的简单异步池。
Deadpool 为连接和任何类型的对象实现了一个简单的异步池。
该 crate 实现了一个 deadpool
管理器,用于 redis
。
功能
功能 | 描述 | 额外依赖项 | 默认 |
---|---|---|---|
rt_tokio_1 |
启用对 tokio crate 的支持 | deadpool/rt_tokio_1 ,redis/tokio-comp |
是 |
rt_async-std_1 |
启用对 async-std crate 的支持 | deadpool/rt_async-std_1 ,redis/async-std-comp |
否 |
serde |
启用对 serde crate 的支持 | deadpool/serde ,serde/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());
}
}
使用 config
和 dotenvy
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());
}
}
使用 config
和 dotenvy
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 的功能?请确保您依赖与
redis
和deadpool-redis
相同的版本,并在自己的Crate.toml
文件中启用所需的功能[dependencies] deadpool-redis = { version = "0.9", features = ["serde"] } redis = { version = "0.21", default-features = false, features = ["tls"] }
许可证
根据以下任一许可证授权
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
依赖关系
约7-18MB
~263K SLoC