Crate deadpool_redis
source ·Expand description
§Deadpool for Redis
Deadpool is a dead simple async pool for connections and objects of any type.
This crate implements a deadpool
manager for redis
.
§Features
Feature | Description | Extra dependencies | Default |
---|---|---|---|
rt_tokio_1 | Enable support for tokio crate | deadpool/rt_tokio_1 , redis/tokio-comp | yes |
rt_async-std_1 | Enable support for async-std crate | deadpool/rt_async-std_1 , redis/async-std-comp | no |
serde | Enable support for serde crate | deadpool/serde , serde/derive | no |
cluster | Enable support for Redis Cluster | redis/cluster-async | no |
§Example
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());
}
}
§Example with config
and 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());
}
}
§Example (Cluster)
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());
}
}
§Example with config
and 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());
}
}
§FAQ
-
How can I enable features of the
redis
crate?Make sure that you depend on the same version of
redis
asdeadpool-redis
does and enable the needed features in your ownCrate.toml
file:[dependencies] deadpool-redis = { version = "0.9", features = ["serde"] } redis = { version = "0.21", default-features = false, features = ["tls"] }
§License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Re-exports§
pub use redis;
Modules§
- This module extends the library to support Redis Cluster.
- This module extends the library to support Redis Cluster.
Structs§
- Configuration object.
- Wrapper around
redis::aio::MultiplexedConnection
. - This is a 1:1 copy of the
redis::ConnectionInfo
struct. This is duplicated here in order to add support for theserde::Deserialize
trait which is required for theserde
support. - Statistics regarding an object returned by the pool
Pool
configuration.- This is a 1:1 copy of the
redis::RedisConnectionInfo
struct. This is duplicated here in order to add support for theserde::Deserialize
trait which is required for theserde
support. - The current pool status.
Enums§
- This error is returned if the configuration contains an error
- This is a 1:1 copy of the
redis::ConnectionAddr
enumeration (excludingtls_params
since it is entirely opaque to consumers). - This is a 1:1 copy of the
redis::ProtocolVersion
struct. Enum representing the communication protocol with the server. This enum represents the types of data that the server can send to the client, and the capabilities that the client can use. - Enumeration for picking a runtime implementation.
Type Aliases§
- Type alias for using
deadpool::managed::BuildError
withredis
. - Type alias for using
deadpool::managed::CreatePoolError
withredis
. - Type alias for using
deadpool::managed::Hook
withredis
. - Type alias for using
deadpool::managed::HookError
withredis
. - Type alias for using
deadpool::managed::Object
withredis
. - Type alias for using
deadpool::managed::Pool
withredis
. - Type alias for using
deadpool::managed::PoolBuilder
withredis
. - Type alias for using
deadpool::managed::PoolError
withredis
.