9次发布
0.3.3 | 2021年10月11日 |
---|---|
0.3.2 | 2021年10月11日 |
0.2.0 | 2021年7月8日 |
0.1.3 | 2021年7月8日 |
0.1.2 | 2021年6月30日 |
#209 在 缓存
58 每月下载
6KB
93 行
simple-async-cache-rs
一个具有过期延迟和自定义类型的快速异步缓存crate。
链接
你为什么要使用这个crate呢?
- 你可以配置过期延迟
- 它支持几乎所有类型/结构体
- 它非常简单,并且完全用Rust编写
- 它可以防止缓存穿透效应
- 它的唯一依赖是tokio。
- 它是线程安全的,并且速度很快
基本示例
use simple_async_cache_rs::AsyncCacheStore;
use std::time::Duration;
use tokio::time::sleep;
#[tokio::main]
async fn main() {
// Create an AsyncCacheStore using implicit typing with an expiration delay of 10 seconds.
let mut store = AsyncCacheStore::new(10);
// If you want to explicitly define types you can do the following:
// let mut store: Arc<AsyncCacheStore<String, String>> = AsyncCacheStore::new(60);
let cache = store.get("key_1".to_string()).await;
let mut result = cache.lock().await;
match &mut *result {
Some(_d) => {
// You can get here the cached value for key_1 if it is already available.
}
None => {
// There is no existing entry for key_1, you can do any task to get the value.
// The AsyncCacheStore prevents dogpile effect by itself.
*result = Some("This is the first value for key_1.");
}
}
// The value for key_1 is still cached.
assert_eq!(
*store.get("key_1".to_string()).await.lock().await,
Some("This is the first value for key_1.")
);
// We sleep for 15 seconds, the value for key_1 is expired.
sleep(Duration::from_secs(15)).await;
assert_eq!(
*store.get("key_1".to_string()).await.lock().await,
None
);
}
依赖项
~2–3MB
~46K SLoC