pub trait Cache<K, V>{
// Required methods
fn get(&self, key: &K) -> Option<V>;
fn insert(&self, key: K, value: V) -> Option<V>;
fn remove(&self, key: &K) -> Option<V>;
fn contains_key(&self, key: &K) -> bool;
fn len(&self) -> usize;
fn clear(&self);
fn capacity(&self) -> usize;
// Provided method
fn is_empty(&self) -> bool { ... }
}Expand description
The common read / write / evict contract every cache type in this crate implements.
All methods take &self (not &mut self) so a cache instance can be
shared across threads and across .await points without external locking.
Implementations use interior mutability.
§Access semantics
getis an access: it may update the eviction order (e.g. promoting the entry to most-recently-used).contains_keyis a query only: it must not update the eviction order.insertis an access on the inserted key.removeis destructive and does not update order.
§Example
use cache_mod::{Cache, LruCache};
let cache: LruCache<&'static str, u32> = LruCache::new(4).expect("capacity > 0");
assert_eq!(cache.insert("a", 1), None);
assert_eq!(cache.get(&"a"), Some(1));
assert!(cache.contains_key(&"a"));
assert_eq!(cache.len(), 1);
assert_eq!(cache.remove(&"a"), Some(1));
assert!(cache.is_empty());Required Methods§
Sourcefn get(&self, key: &K) -> Option<V>
fn get(&self, key: &K) -> Option<V>
Returns the value associated with key, if any, and counts as an
access for the purposes of the eviction policy.
Sourcefn insert(&self, key: K, value: V) -> Option<V>
fn insert(&self, key: K, value: V) -> Option<V>
Inserts value under key. Returns the previously-stored value if
key was already present.
May evict one or more existing entries to make room, according to
the cache’s eviction policy. For TinyLfuCache the value may also
be silently rejected by the admission filter — in that case the
return value is None and the cache is unchanged.
The return value carries useful information (new-vs-replace, or
admit-vs-reject for TinyLfuCache). If you genuinely don’t need
it, bind to _ explicitly.
Sourcefn remove(&self, key: &K) -> Option<V>
fn remove(&self, key: &K) -> Option<V>
Removes the entry for key and returns the value if present.
Sourcefn contains_key(&self, key: &K) -> bool
fn contains_key(&self, key: &K) -> bool
Returns true if the cache currently holds an entry for key.
Unlike get, this method does not count as an
access — eviction order is left unchanged. For TtlCache an
expired-but-not-yet-cleaned entry is removed during the check and
the method returns false.
Sourcefn len(&self) -> usize
fn len(&self) -> usize
Number of entries currently stored.
For sharded caches (capacity ≥ 32), this is computed by summing
each shard’s length while briefly locking each in turn — it is
not an atomic snapshot of all shards simultaneously. In
practice this matters only for code that races a len() against
concurrent writers and expects a single instantaneous value.
Sourcefn clear(&self)
fn clear(&self)
Removes every entry. Capacity is preserved.
For caches with auxiliary state — LfuCache’s priority index,
TinyLfuCache’s Count-Min Sketch, the monotonic clocks used by
LfuCache and TinyLfuCache — that state is reset alongside the
entries themselves. Configured capacity / max_weight is the only
piece of state that survives.
Provided Methods§
Implementors§
impl<K, V> Cache<K, V> for LfuCache<K, V>
std only.impl<K, V> Cache<K, V> for LruCache<K, V>
std only.impl<K, V> Cache<K, V> for SizedCache<K, V>
std only.impl<K, V> Cache<K, V> for TinyLfuCache<K, V>
std only.impl<K, V> Cache<K, V> for TtlCache<K, V>
std only.