Skip to main content

Cache

Struct Cache 

Source
pub struct Cache<K, V> {
    data: DashMap<K, Arc<SetOnce<V>>>,
    pub num_hits: AtomicUsize,
    pub num_misses: AtomicUsize,
}
Expand description

Cache for asynchronous operations. Each operation is associated with a key, and operations are cached, deduplicated and mutually exclusive with other operations on the same key, including in-progress operations.

Fields§

§data: DashMap<K, Arc<SetOnce<V>>>

Internal map of keys to set-once values.

§num_hits: AtomicUsize

Number of cache hits (including hits to in-progress values).

§num_misses: AtomicUsize

Number of cache misses.

Implementations§

Source§

impl<K, V> Cache<K, V>
where K: Hash + Eq,

Source

pub fn new() -> Self

Constructs a new empty Cache.

Source

pub fn lock_entry(&self, key: &K) -> Result<CacheSetter<V>, CacheFut<V>>
where K: Clone,

Locks the cache entry with the given key, adding it to the cache if it does not already exist. This function returns values which can be used to write into or read from the cache.

If this is the first task to lock this entry, Ok of CacheSetter is returned so the call can compute and store the value. If the value is already cached or another task is currently computing the value, Err of CacheFut is returned which can be used to wait and retrieve the value from the cache.

The given key will only be cloned if the cache does not currently have an entry for this key.

§Errors

An Err means the cache key is already completed or in-progress, as described above.

Source

pub fn into_completed_entries(self) -> impl Iterator<Item = (K, V)>

Consumes the cache and returns an iterator over the completed key and value pairs.

§Panics

This function will panic if there are leftover CacheFut or CacheSetter references pointing to the current cache.

Trait Implementations§

Source§

impl<K, V> Debug for Cache<K, V>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<K, V> Default for Cache<K, V>
where K: Hash + Eq,

Source§

fn default() -> Self

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

impl<K, V> FromIterator<(K, V)> for Cache<K, V>
where K: Hash + Eq,

Source§

fn from_iter<It: IntoIterator<Item = (K, V)>>(iter: It) -> Self

Creates a value from an iterator. Read more

Auto Trait Implementations§

§

impl<K, V> !Freeze for Cache<K, V>

§

impl<K, V> !RefUnwindSafe for Cache<K, V>

§

impl<K, V> Send for Cache<K, V>
where K: Send, V: Sync + Send,

§

impl<K, V> Sync for Cache<K, V>
where K: Send + Sync, V: Sync + Send,

§

impl<K, V> Unpin for Cache<K, V>

§

impl<K, V> UnsafeUnpin for Cache<K, V>

§

impl<K, V> !UnwindSafe for Cache<K, V>

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

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

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

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. 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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

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