1个稳定版本
1.0.0 | 2023年8月15日 |
---|
#245 in 缓存
8KB
137 行
Cachr
Cachr是一个简单的Rust库,通过不允许删除条目,提供对hashmap的共享读写访问。这对于只读或包含在缓存中的数据非常有用。
fn main() {
let cache = cachr::Cachr::new();
let s1 = SomeStruct::new(&cache);
let s2 = SomeOtherStruct::new(&cache);
// s1 and s2 will both be able to read and write
// (but not remove) entries from the cache.
do_something_1(&s1);
do_something_2(&s2);
// some_complex_function is only called once
println!("{}", cache[0]);
}
fn do_something_1(s1: &SomeStruct) {
s1.cache.get_or_insert(0, || some_complex_function());
}
fn do_something_2(s2: &SomeOtherStruct) {
s2.cache.get_or_insert(0, || some_complex_function());
}
您可以通过每次调用需要缓存的结构体的可变引用来模拟此行为,但这很快变得繁琐且不必要。
与elsa的比较?
Elsa功能更广泛,但比Cachr更复杂。此库只允许Boxed对象,只提供HashMap实现,但这样用80行简单、经过测试、基准测试的代码完成。
Cachr还提供了get_or_insert
语义,这在需要计算但尚未缓存的情况下的常见情况下跳过重复的hash查找。Elsa不提供此功能。除此之外,Cachr和Elsa的执行与标准HashMap相同。