2 unstable releases
0.3.0 | Jan 19, 2024 |
---|---|
0.2.0 | Mar 21, 2023 |
#177 in Concurrency
92,704 downloads per month
Used in 8 crates
(3 directly)
17KB
378 lines
CacheMap
CacheMap is a data structure for concurrently caching values.
The cache
function will look up a value in the map, or generate and store a new one using the
provided function.
This is a updated and maintained fork of hclarke/cachemap.
Example
use cachemap::CacheMap;
let m = CacheMap::new();
let fst = m.cache("key", || 5u32);
let snd = m.cache("key", || 7u32);
assert_eq!(*fst, *snd);
assert_eq!(*fst, 5u32);
Features
- Can cache values concurrently (using
&CacheMap<K,V>
rather than&mut CacheMap<K,V>
). - Returned references use the map's lifetime, so clients can avoid smart pointers.
- Clients can optionally enable the
dashmap
feature, which usesdashmap
internally and allows:- getting
Arc<V>
pointers, in case values need to outlive the map, and - adding
Arc<V>
directly, allowing unsized values, and re-usingArc<V>
s from elsewhere.
- getting
- Clients can optionally enable the
abi_stable
feature which will deriveabi_stable::StableAbi
on the type.
AntiFeatures
- There is no cache invalidation: the only way to remove things from a CacheMap is to drop it.
Dependencies
~0–5.5MB
~21K SLoC