3个版本 (破坏性更新)
0.3.0 | 2023年8月11日 |
---|---|
0.2.0 | 2023年7月23日 |
0.1.0 | 2023年4月9日 |
224 in 缓存
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