pub struct ExpiringCache<T, E> { /* private fields */ }
Expand description

Expiry-aware cache

ExpiringCache implements two important features:

  1. Respect expiry of contents
  2. Deduplicate load requests to prevent thundering herds when no value is present.

Implementations§

source§

impl<T, E> ExpiringCache<T, E>
where T: Clone,

source

pub fn new(buffer_time: Duration) -> Self

Creates ExpiringCache with the given buffer_time.

source

pub async fn get_or_load<F, Fut>(&self, f: F) -> Result<T, E>
where F: FnOnce() -> Fut, Fut: Future<Output = Result<(T, SystemTime), E>>,

Attempts to refresh the cached value with the given future. If multiple threads attempt to refresh at the same time, one of them will win, and the others will await that thread’s result rather than multiple refreshes occurring. The function given to acquire a value future, f, will not be called if another thread is chosen to load the value.

source

pub async fn yield_or_clear_if_expired(&self, now: SystemTime) -> Option<T>

If the value is expired, clears the cache. Otherwise, yields the current value.

Trait Implementations§

source§

impl<T, E> Clone for ExpiringCache<T, E>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl<T: Debug, E: Debug> Debug for ExpiringCache<T, E>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T, E> Freeze for ExpiringCache<T, E>

§

impl<T, E> !RefUnwindSafe for ExpiringCache<T, E>

§

impl<T, E> Send for ExpiringCache<T, E>
where E: Send, T: Sync + Send,

§

impl<T, E> Sync for ExpiringCache<T, E>
where E: Sync, T: Sync + Send,

§

impl<T, E> Unpin for ExpiringCache<T, E>
where E: Unpin,

§

impl<T, E> !UnwindSafe for ExpiringCache<T, E>

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<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
source§

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

§

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>,

§

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>,

§

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