Struct RTCache

Source
pub struct RTCache<K, T, CB, S>
where K: Hash + Send, T: Clone + Send,
{ /* private fields */ }
Expand description

A read-through in-memory cache on top of MemoryCache

Instead of providing a put function, RTCache requires a type which implements Lookup to be automatically called during cache miss to populate the cache. This is useful when trying to cache queries to external system such as DNS or databases.

Lookup coalescing is provided so that multiple concurrent lookups for the same key results only in one lookup callback.

Implementations§

Source§

impl<K, T, CB, S> RTCache<K, T, CB, S>
where K: Hash + Send, T: Clone + Send + Sync + 'static,

Source

pub fn new( size: usize, lock_age: Option<Duration>, lock_timeout: Option<Duration>, ) -> Self

Create a new RTCache of given size. lock_age defines how long a lock is valid for. lock_timeout is used to stop a lookup from holding on to the key for too long.

Source§

impl<K, T, CB, S> RTCache<K, T, CB, S>
where K: Hash + Send, T: Clone + Send + Sync + 'static, CB: Lookup<K, T, S>,

Source

pub async fn get( &self, key: &K, ttl: Option<Duration>, extra: Option<&S>, ) -> (Result<T, Box<Error>>, CacheStatus)

Query the cache for a given value. If it exists and no TTL is configured initially, it will use the ttl value given.

Source§

impl<K, T, CB, S> RTCache<K, T, CB, S>
where K: Hash + Send, T: Clone + Send + Sync + 'static, CB: MultiLookup<K, T, S>,

Source

pub async fn multi_get<'a, I>( &self, keys: I, ttl: Option<Duration>, extra: Option<&S>, ) -> Result<Vec<(T, CacheStatus)>, Box<Error>>
where I: Iterator<Item = &'a K>, K: 'a,

Same behavior as RTCache::get but for an arbitrary amount of keys.

If there are keys that are missing from the cache, multi_lookup is invoked to populate the cache before returning the final results. This is useful if your type supports batch queries.

To avoid dead lock for the same key across concurrent multi_get calls, this function does not provide lookup coalescing.

Auto Trait Implementations§

§

impl<K, T, CB, S> !Freeze for RTCache<K, T, CB, S>

§

impl<K, T, CB, S> !RefUnwindSafe for RTCache<K, T, CB, S>

§

impl<K, T, CB, S> Send for RTCache<K, T, CB, S>
where CB: Send, S: Send, T: Sync,

§

impl<K, T, CB, S> Sync for RTCache<K, T, CB, S>
where CB: Sync, S: Sync, K: Sync, T: Sync,

§

impl<K, T, CB, S> Unpin for RTCache<K, T, CB, S>
where CB: Unpin, S: Unpin, K: Unpin, T: Unpin,

§

impl<K, T, CB, S> !UnwindSafe for RTCache<K, T, CB, S>

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