Skip to main content

RedisBackend

Struct RedisBackend 

Source
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

§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 expire timestamp returned on read is calculated as now + PTTL, which may drift by the network round-trip time

Implementations§

Source§

impl RedisBackend<BincodeFormat, PassthroughCompressor>

Source

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>
where S: Format + Send + Sync, C: Compressor + Send + Sync,

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,

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,

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,

Remove data from cache.
Source§

fn label(&self) -> BackendLabel

Backend label for metrics and source path composition. Read more
Source§

fn value_format(&self) -> &dyn Format

Serialization format for cached values. Default: BincodeFormat.
Source§

fn key_format(&self) -> &CacheKeyFormat

Key serialization format. Default: CacheKeyFormat::Bitcode.
Source§

fn compressor(&self) -> &dyn Compressor

Compressor for cached values. Default: PassthroughCompressor.
Source§

impl<S, C> CacheBackend for RedisBackend<S, C>
where S: Format + Send + Sync, C: Compressor + Send + Sync,

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

Retrieve a typed value from cache. Read more
Source§

fn set<T>( &self, key: &CacheKey, value: &CacheValue<<T as CacheableResponse>::Cached>, ctx: &mut SmallBox<dyn Context, S4>, ) -> impl Future<Output = Result<(), BackendError>> + Send

Store a typed value in cache. Read more
Source§

fn delete( &self, key: &CacheKey, _ctx: &mut SmallBox<dyn Context, S4>, ) -> impl Future<Output = Result<DeleteStatus, BackendError>> + Send

Delete a value from cache. Read more
Source§

impl<S, C> Clone for RedisBackend<S, C>
where S: Format + Clone, C: Compressor + Clone,

Source§

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)

Performs copy-assignment from source. Read more

Auto 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>
where S: Unpin, C: Unpin,

§

impl<S = BincodeFormat, C = PassthroughCompressor> !UnwindSafe for RedisBackend<S, C>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Compose for T
where T: Backend,

Source§

fn compose<L2, O>(self, l2: L2, offload: O) -> CompositionBackend<Self, L2, O>
where L2: Backend, O: Offload<'static>,

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>

Compose this backend with another backend as L2, using custom policies. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more