1个稳定版本

1.0.0 2023年8月15日

#245 in 缓存

MIT/Apache

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相同。

无运行时依赖