pub(crate) struct AsyncLruCache<K: Clone + Copy + Debug + PartialEq + Eq + Hash + Send + Sync, V: Send + Sync, B: AsyncLruCacheBackend<Key = K, Value = V>>(Arc<AsyncLruCacheInner<K, V, B>>);
Expand description
Least-recently-used cache with async access.
Keeps the least recently used entries up to a limited count. Accessing and flushing is async-aware.
K
is the key used to uniquely identify cache entries, V
is the cached data.
Tuple Fields§
§0: Arc<AsyncLruCacheInner<K, V, B>>
Implementations§
Source§impl<K: Clone + Copy + Debug + PartialEq + Eq + Hash + Send + Sync, V: Send + Sync, B: AsyncLruCacheBackend<Key = K, Value = V>> AsyncLruCache<K, V, B>
impl<K: Clone + Copy + Debug + PartialEq + Eq + Hash + Send + Sync, V: Send + Sync, B: AsyncLruCacheBackend<Key = K, Value = V>> AsyncLruCache<K, V, B>
Sourcepub fn new(backend: B, size: usize) -> Self
pub fn new(backend: B, size: usize) -> Self
Create a new cache.
size
is the maximum number of entries to keep in the cache.
Sourcepub async fn get_or_insert(&self, key: K) -> Result<Arc<V>>
pub async fn get_or_insert(&self, key: K) -> Result<Arc<V>>
Retrieve an entry from the cache.
If there is no entry yet, run read()
to generate it. If then there are more entries in
the cache than its limit, flush out the oldest entry via flush()
.
Sourcepub async fn insert(&self, key: K, value: Arc<V>) -> Result<()>
pub async fn insert(&self, key: K, value: Arc<V>) -> Result<()>
Force-insert the given object into the cache.
If there is an existing object under that key, it is flushed first.
Sourcepub async fn flush(&self) -> Result<()>
pub async fn flush(&self) -> Result<()>
Flush all cache entries.
Those entries are not evicted, but remain in the cache.
Sourcepub async unsafe fn invalidate(&self) -> Result<()>
pub async unsafe fn invalidate(&self) -> Result<()>
Evict all cache entries.
Evicts all cache entries without flushing them.
§Safety
Depending on the nature of the cache, this operation may be unsafe. Perform at your own risk.
Source§impl<K: Clone + Copy + Debug + PartialEq + Eq + Hash + Send + Sync + 'static, V: Send + Sync + 'static, B: AsyncLruCacheBackend<Key = K, Value = V> + 'static> AsyncLruCache<K, V, B>
impl<K: Clone + Copy + Debug + PartialEq + Eq + Hash + Send + Sync + 'static, V: Send + Sync + 'static, B: AsyncLruCacheBackend<Key = K, Value = V> + 'static> AsyncLruCache<K, V, B>
Sourcepub async fn depend_on<K2: Clone + Copy + Debug + PartialEq + Eq + Hash + Send + Sync + 'static, V2: Send + Sync + 'static, B2: AsyncLruCacheBackend<Key = K2, Value = V2> + 'static>(
&self,
other: &AsyncLruCache<K2, V2, B2>,
) -> Result<()>
pub async fn depend_on<K2: Clone + Copy + Debug + PartialEq + Eq + Hash + Send + Sync + 'static, V2: Send + Sync + 'static, B2: AsyncLruCacheBackend<Key = K2, Value = V2> + 'static>( &self, other: &AsyncLruCache<K2, V2, B2>, ) -> Result<()>
Set up a flush dependency.
Ensure that before anything in this cache is flushed, flush_before
is flushed first.