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> !RefUnwindSafe for ExpiringCache<T, E>

§

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

§

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

§

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 Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere 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 Twhere 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 Twhere 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 Twhere 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 Twhere 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<V, T> VZip<V> for Twhere V: MultiLane<T>,

source§

fn vzip(self) -> V

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