#cache #coalescing #coalesce

cache-compute

此crate实现了请求/异步计算的合并

3个版本 (破坏性更新)

0.3.0 2023年8月11日
0.2.0 2023年7月23日
0.1.0 2023年4月9日

224 in 缓存

MIT许可证

38KB
618 代码行

此crate实现了请求/异步计算的合并。

此实现的起点是fasterthanlime关于异步Rust中请求合并的优秀文章异步Rust中请求合并

异步计算的缓存可能是一个有点棘手的问题。如果我们需要缓存值时没有可用,我们希望计算它,通常异步地。此crate通过避免在已有计算发生时启动新计算,帮助确保这种计算不会发生得太多。相反,我们将订阅那个计算,并处理其结果。

示例

use cache_compute::Cached;

pub async fn get_answer(cached_answer: Cached<u32, ()>) -> u32 {
    if answer_too_old() {
        cached_answer.invalidate();
    }

    cached_answer.get_or_compute(|| async {
        // Really long async computation
        // Phew the computer and network sure need a lot of time to work on this
        // Good thing we cache it
        // ...
        // Ok done
        // Other calls to get_answer will now also use that same value
        // without having to compute it, until it's too old again
        refresh_answer_timer();
        Ok(42)
    })
    .await
    .unwrap()
}

贡献

请随意 :)

文档

这里

依赖

~3–10MB
~94K SLoC