Skip to main content

CacheBuilder

Struct CacheBuilder 

Source
pub struct CacheBuilder<B, C, CM, O = DisabledOffload> { /* private fields */ }
Expand description

Fluent builder for constructing a Cache layer.

Use Cache::builder() to create a new builder. Both backend() and config() must be called before build().

§Type Parameters

The type parameters change as you call builder methods:

§Examples

use std::time::Duration;
use hitbox_tower::Cache;
use hitbox_moka::MokaBackend;
use hitbox::Config;
use hitbox::policy::PolicyConfig;
use hitbox_http::extractors::Method;
use hitbox_http::predicates::{NeutralRequestPredicate, NeutralResponsePredicate};
use http::header::HeaderName;

let config = Config::builder()
    .request_predicate(NeutralRequestPredicate::new())
    .response_predicate(NeutralResponsePredicate::new())
    .extractor(Method::new())
    .policy(PolicyConfig::builder().ttl(Duration::from_secs(300)).build())
    .build();

let layer = Cache::builder()
    .backend(MokaBackend::builder().max_entries(10_000).build())
    .config(config)
    .cache_status_header(HeaderName::from_static("x-custom-cache"))
    .build();

Implementations§

Source§

impl CacheBuilder<NotSet, NotSet, NoopConcurrencyManager, DisabledOffload>

Source

pub fn new() -> Self

Creates a new builder.

Prefer using Cache::builder() instead of calling this directly.

Source§

impl<B, C, CM, O> CacheBuilder<B, C, CM, O>

Source

pub fn backend<NB: CacheBackend>( self, backend: NB, ) -> CacheBuilder<NB, C, CM, O>

Sets the cache backend for storing responses.

Common backends:

  • MokaBackend — In-memory cache (from hitbox-moka)
  • RedisBackend — Distributed cache via Redis (from hitbox-redis)
§Examples
use hitbox_tower::Cache;
use hitbox_moka::MokaBackend;

let builder = Cache::builder()
    .backend(MokaBackend::builder().max_entries(1000).build());
Source

pub fn config<NC>(self, configuration: NC) -> CacheBuilder<B, NC, CM, O>

Sets the cache configuration with predicates, extractors, and policy.

Use Config::builder() to create a configuration with:

  • Request predicates (which requests to cache)
  • Response predicates (which responses to cache)
  • Extractors (how to generate cache keys)
  • Policy (TTL, stale handling)
§Examples
use std::time::Duration;
use hitbox_tower::Cache;
use hitbox_moka::MokaBackend;
use hitbox::Config;
use hitbox::policy::PolicyConfig;
use hitbox_http::extractors::Method;
use hitbox_http::predicates::{NeutralRequestPredicate, NeutralResponsePredicate};

let config = Config::builder()
    .request_predicate(NeutralRequestPredicate::new())
    .response_predicate(NeutralResponsePredicate::new())
    .extractor(Method::new())
    .policy(PolicyConfig::builder().ttl(Duration::from_secs(60)).build())
    .build();

let layer = Cache::builder()
    .backend(MokaBackend::builder().max_entries(1000).build())
    .config(config)
    .build();
Source

pub fn concurrency_manager<NCM>( self, concurrency_manager: NCM, ) -> CacheBuilder<B, C, NCM, O>

Sets the concurrency manager for dogpile prevention.

The dogpile effect occurs when a cache entry expires and multiple concurrent requests all try to refresh it simultaneously. A concurrency manager prevents this by coordinating requests.

Options:

Source

pub fn offload<NO>(self, offload: NO) -> CacheBuilder<B, C, CM, NO>

Sets the offload strategy for background revalidation.

When serving stale content, the offload strategy determines how background refresh is performed.

Defaults to DisabledOffload (synchronous revalidation).

Source

pub fn cache_status_header(self, header_name: HeaderName) -> Self

Sets the header name for cache status.

The cache status header indicates whether a response was served from cache. Possible values are HIT, MISS, or STALE.

Defaults to DEFAULT_CACHE_STATUS_HEADER (x-cache-status).

§Examples
use hitbox_tower::Cache;
use hitbox_moka::MokaBackend;
use http::header::HeaderName;

let builder = Cache::builder()
    .backend(MokaBackend::builder().max_entries(1000).build())
    .cache_status_header(HeaderName::from_static("x-custom-cache"));
Source§

impl<B, C, CM, O> CacheBuilder<B, C, CM, O>
where B: CacheBackend,

Source

pub fn build(self) -> Cache<B, C, CM, O>

Builds the Cache layer.

Both backend() and config() must be called before this method.

Trait Implementations§

Source§

impl Default for CacheBuilder<NotSet, NotSet, NoopConcurrencyManager, DisabledOffload>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<B, C, CM, O = DisabledOffload> !Freeze for CacheBuilder<B, C, CM, O>

§

impl<B, C, CM, O> RefUnwindSafe for CacheBuilder<B, C, CM, O>

§

impl<B, C, CM, O> Send for CacheBuilder<B, C, CM, O>
where B: Send, C: Send, O: Send, CM: Send,

§

impl<B, C, CM, O> Sync for CacheBuilder<B, C, CM, O>
where B: Sync, C: Sync, O: Sync, CM: Sync,

§

impl<B, C, CM, O> Unpin for CacheBuilder<B, C, CM, O>
where B: Unpin, C: Unpin, O: Unpin, CM: Unpin,

§

impl<B, C, CM, O> UnwindSafe for CacheBuilder<B, C, CM, O>

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> 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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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