pub struct RedisBackend<S = BincodeFormat, C = PassthroughCompressor>where
S: Format,
C: Compressor,{ /* private fields */ }Expand description
Redis cache backend for single-node or cluster deployments.
RedisBackend provides a cache backend using Redis as the storage layer.
It supports both single-node Redis instances and Redis Cluster
(with the cluster feature enabled).
Use RedisBackendBuilder to construct this type.
§Type Parameters
S- Serialization format for cache values. ImplementsFormat. Default:BincodeFormat(compact binary, recommended for production).C- Compression strategy for cache values. ImplementsCompressor. Default:PassthroughCompressor(no compression).
§Examples
Basic single-node connection:
use hitbox_redis::{RedisBackend, ConnectionMode};
let backend = RedisBackend::builder()
.connection(ConnectionMode::single("redis://localhost:6379/"))
.build()?;With all configuration options:
use std::time::Duration;
use hitbox_redis::{RedisBackend, ConnectionMode};
use hitbox_backend::CacheKeyFormat;
use hitbox_backend::format::JsonFormat;
let backend = RedisBackend::builder()
.connection(ConnectionMode::single("redis://localhost:6379/"))
.username("cache_user") // Redis 6+ ACL
.password("secret")
.label("user-sessions")
.key_format(CacheKeyFormat::UrlEncoded)
.value_format(JsonFormat)
.connection_timeout(Duration::from_secs(5))
.response_timeout(Duration::from_secs(2))
.retries(3)
.build()?;Cluster connection (requires cluster feature):
use hitbox_redis::{RedisBackend, ConnectionMode};
let backend = RedisBackend::builder()
.connection(ConnectionMode::cluster([
"redis://node1:6379",
"redis://node2:6379",
"redis://node3:6379",
]))
.build()?;§Performance
- Read operations: Single pipelined request (
HMGET+PTTL) - Write operations: Single pipelined request (
HSET+EXPIRE) - Connection: Established lazily on first use, multiplexed for concurrent access
§Caveats
- Connection failure: First cache operation will fail if Redis is unreachable
- Expire time approximation: The
expiretimestamp returned on read is calculated asnow + PTTL, which may drift by the network round-trip time
Implementations§
Source§impl RedisBackend<BincodeFormat, PassthroughCompressor>
impl RedisBackend<BincodeFormat, PassthroughCompressor>
Sourcepub fn builder() -> RedisBackendBuilder<BincodeFormat, PassthroughCompressor>
pub fn builder() -> RedisBackendBuilder<BincodeFormat, PassthroughCompressor>
Creates a new builder for RedisBackend.
Use the builder to configure the connection mode, serialization format,
key format, compression, and label. See RedisBackend for examples.
Trait Implementations§
Source§impl<S, C> Backend for RedisBackend<S, C>
impl<S, C> Backend for RedisBackend<S, C>
Source§fn read<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 CacheKey,
) -> Pin<Box<dyn Future<Output = BackendResult<Option<CacheValue<Raw>>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 CacheKey,
) -> Pin<Box<dyn Future<Output = BackendResult<Option<CacheValue<Raw>>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Read raw cached data by key. Read more
Source§fn write<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 CacheKey,
value: CacheValue<Raw>,
) -> Pin<Box<dyn Future<Output = BackendResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn write<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 CacheKey,
value: CacheValue<Raw>,
) -> Pin<Box<dyn Future<Output = BackendResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Write raw data to cache.
Source§fn remove<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 CacheKey,
) -> Pin<Box<dyn Future<Output = BackendResult<DeleteStatus>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn remove<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 CacheKey,
) -> Pin<Box<dyn Future<Output = BackendResult<DeleteStatus>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Remove data from cache.
Source§fn label(&self) -> BackendLabel
fn label(&self) -> BackendLabel
Backend label for metrics and source path composition. Read more
Source§fn value_format(&self) -> &dyn Format
fn value_format(&self) -> &dyn Format
Serialization format for cached values. Default:
BincodeFormat.Source§fn key_format(&self) -> &CacheKeyFormat
fn key_format(&self) -> &CacheKeyFormat
Key serialization format. Default:
CacheKeyFormat::Bitcode.Source§fn compressor(&self) -> &dyn Compressor
fn compressor(&self) -> &dyn Compressor
Compressor for cached values. Default:
PassthroughCompressor.Source§impl<S, C> CacheBackend for RedisBackend<S, C>
impl<S, C> CacheBackend for RedisBackend<S, C>
Source§fn get<T>(
&self,
key: &CacheKey,
ctx: &mut SmallBox<dyn Context, S4>,
) -> impl Future<Output = Result<Option<CacheValue<<T as CacheableResponse>::Cached>>, BackendError>> + Send
fn get<T>( &self, key: &CacheKey, ctx: &mut SmallBox<dyn Context, S4>, ) -> impl Future<Output = Result<Option<CacheValue<<T as CacheableResponse>::Cached>>, BackendError>> + Send
Retrieve a typed value from cache. Read more
Source§impl<S, C> Clone for RedisBackend<S, C>
impl<S, C> Clone for RedisBackend<S, C>
Source§fn clone(&self) -> RedisBackend<S, C>
fn clone(&self) -> RedisBackend<S, C>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl<S = BincodeFormat, C = PassthroughCompressor> !Freeze for RedisBackend<S, C>
impl<S = BincodeFormat, C = PassthroughCompressor> !RefUnwindSafe for RedisBackend<S, C>
impl<S, C> Send for RedisBackend<S, C>
impl<S, C> Sync for RedisBackend<S, C>
impl<S, C> Unpin for RedisBackend<S, C>
impl<S = BincodeFormat, C = PassthroughCompressor> !UnwindSafe for RedisBackend<S, C>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Compose for Twhere
T: Backend,
impl<T> Compose for Twhere
T: Backend,
Source§fn compose<L2, O>(self, l2: L2, offload: O) -> CompositionBackend<Self, L2, O>
fn compose<L2, O>(self, l2: L2, offload: O) -> CompositionBackend<Self, L2, O>
Compose this backend with another backend as L2, using default policies. Read more
Source§fn compose_with<L2, O, R, W>(
self,
l2: L2,
offload: O,
policy: CompositionPolicy<R, W>,
) -> CompositionBackend<Self, L2, O, R, W>
fn compose_with<L2, O, R, W>( self, l2: L2, offload: O, policy: CompositionPolicy<R, W>, ) -> CompositionBackend<Self, L2, O, R, W>
Compose this backend with another backend as L2, using custom policies. Read more