6 个版本
0.2.2 | 2024 年 2 月 8 日 |
---|---|
0.2.1 | 2024 年 2 月 7 日 |
0.2.0 | 2023 年 9 月 10 日 |
0.1.2 | 2023 年 9 月 10 日 |
0.1.1 | 2023 年 8 月 22 日 |
#72 in 缓存
69 每月下载量
在 laminarmq 中使用
63KB
1.5K SLoC
generational-cache
基于代际竞技场的缓存实现,100% 安全,[no_std] 兼容 Rust。
使用方法
generational-cache
是一个库 Crates。您可以在 Cargo.toml
中如下包含它
[dependencies]
generational-cache = "0.2.2"
有关详细信息,请参阅最新的 git API 文档 或 Crates 文档。
示例
-
LRU 缓存 (
generational_cache::cache::LRUCache
)基于代际竞技场的 LRU 缓存实现。
#[no_std] use generational_cache::prelude::*; const CAPACITY: usize = 3; // users can choose between different map and vector implementations let mut cache = LRUCache::<_, i32, u64, AllocBTreeMap<_, _>>::with_backing_vector(Array::<_, CAPACITY>::new()); cache.insert(-1, 1).unwrap(); cache.insert(-2, 2).unwrap(); cache.insert(-3, 3).unwrap(); assert_eq!(cache.least_recent().unwrap(), (&-1, &1)); assert_eq!(cache.most_recent().unwrap(), (&-3, &3)); assert_eq!(cache.insert(-4, 4).unwrap(), Eviction::Block { key: -1, value: 1}); assert_eq!(cache.least_recent().unwrap(), (&-2, &2)); assert_eq!(cache.most_recent().unwrap(), (&-4, &4)); assert_eq!(cache.insert(-2, 42).unwrap(), Eviction::Value(2)); assert_eq!(cache.least_recent().unwrap(), (&-3, &3)); assert_eq!(cache.most_recent().unwrap(), (&-2, &42)); assert_eq!(cache.remove(&-42).unwrap(), Lookup::Miss); assert_eq!(cache.query(&-42).unwrap(), Lookup::Miss); assert_eq!(cache.query(&-3).unwrap(), Lookup::Hit(&3)); assert_eq!(cache.least_recent().unwrap(), (&-4, &4)); assert_eq!(cache.most_recent().unwrap(), (&-3, &3)); assert_eq!(cache.remove(&-2).unwrap(), Lookup::Hit(42)); assert_eq!(cache.query(&-2).unwrap(), Lookup::Miss); // zero capacity LRUCache is unusable let mut cache = LRUCache::<_, i32, u64, AllocBTreeMap<_, _>>::with_backing_vector(Array::<_, 0_usize>::new()); match cache.insert(0, 0) { Err(LRUCacheError::ListUnderflow) => {} _ => unreachable!("Wrong error on list underflow."), };
(… 我们计划在将来添加更多缓存实现)。
许可证
本仓库使用 MIT 许可证。有关详细信息,请参阅 许可证。