Skip to main content

MultiTierBackend

Struct MultiTierBackend 

Source
pub struct MultiTierBackend<L1, L2> { /* private fields */ }
Expand description

Multi-tier cache backend combining fast L1 and persistent L2.

The multi-tier backend automatically promotes frequently accessed entries from L2 to L1 based on the configured promotion strategy.

Implementations§

Source§

impl<L1, L2> MultiTierBackend<L1, L2>
where L1: CacheBackend, L2: CacheBackend,

Source

pub fn new(l1: L1, l2: L2) -> Self

Creates a new multi-tier backend with default configuration.

Source

pub fn builder() -> MultiTierBuilder<L1, L2>

Creates a builder for configuring the multi-tier backend.

Source

pub fn l1(&self) -> &L1

Returns a reference to the L1 backend.

Source

pub fn l2(&self) -> &L2

Returns a reference to the L2 backend.

Source

pub fn stats(&self) -> &TierStats

Returns a reference to the current tier statistics.

Trait Implementations§

Source§

impl<L1, L2> CacheBackend for MultiTierBackend<L1, L2>
where L1: CacheBackend, L2: CacheBackend,

Source§

async fn get_keys_by_tag(&self, tag: &str) -> Result<Vec<String>, CacheError>

Merges both tiers.

A tier that reports CacheError::Unsupported — the shared backends keep no tag index — contributes nothing rather than failing the whole call, so the common InMemoryBackend over RedisBackend arrangement keeps working off the L1 index. Only if neither tier has an index is the Unsupported error propagated.

Source§

async fn invalidate_by_tag(&self, tag: &str) -> Result<usize, CacheError>

Invalidates in both tiers, tolerating a tier without a tag index in the same way as get_keys_by_tag.

Source§

async fn list_tags(&self) -> Result<Vec<String>, CacheError>

Merges both tiers, tolerating a tier without a tag index in the same way as get_keys_by_tag.

Source§

async fn get(&self, key: &str) -> Result<Option<CacheRead>, CacheError>

Fetches a cached entry by key. Read more
Source§

async fn set( &self, key: String, entry: CacheEntry, ttl: Duration, stale_for: Duration, ) -> Result<(), CacheError>

Stores an entry with a time-to-live and additional stale window.
Source§

async fn invalidate(&self, key: &str) -> Result<(), CacheError>

Invalidates the cache entry for key, if present.
Source§

fn invalidate_by_tags( &self, tags: &[String], ) -> impl Future<Output = Result<usize, CacheError>> + Send

Invalidates all cache entries associated with multiple tags. Read more
Source§

impl<L1: Clone, L2: Clone> Clone for MultiTierBackend<L1, L2>

Source§

fn clone(&self) -> MultiTierBackend<L1, L2>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl<L1, L2> !RefUnwindSafe for MultiTierBackend<L1, L2>

§

impl<L1, L2> !UnwindSafe for MultiTierBackend<L1, L2>

§

impl<L1, L2> Freeze for MultiTierBackend<L1, L2>
where L1: Freeze, L2: Freeze,

§

impl<L1, L2> Send for MultiTierBackend<L1, L2>
where L1: Send, L2: Send,

§

impl<L1, L2> Sync for MultiTierBackend<L1, L2>
where L1: Sync, L2: Sync,

§

impl<L1, L2> Unpin for MultiTierBackend<L1, L2>
where L1: Unpin, L2: Unpin,

§

impl<L1, L2> UnsafeUnpin for MultiTierBackend<L1, L2>
where L1: UnsafeUnpin, L2: UnsafeUnpin,

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

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> 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 = !

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.