2 个版本
0.1.1 | 2023 年 8 月 15 日 |
---|---|
0.1.0 | 2023 年 8 月 14 日 |
#214 在 缓存
13KB
222 行
CrudeCache
CrudeCache
是一个简单实用工具,用于满足足够的并发缓存需求。灵感来源于 Play Framework 的 cache.getOrElseUpdate。
//Returns non-expired cached item. If one does not exist, new item will be cached & returned
cache.get_or_else_update("cache_key", Duration::from_secs(60), async_function).await
免责声明:请注意,CrudeCache
是为个人项目开发的,它未经生产环境测试,可能存在错误。欢迎反馈、建议和贡献。
特性
- 缓存项的过期评估是懒加载的。
- 为了最小化竞争点,项目存储在
ShardedMap
中,该映射将数据分割到多个分片中(HashMaps
)。没有花哨的功能,也不进行重新分片。 - 每个分片后面是
tokio::sync::RwLock
安装
将其添加到您的 Cargo.toml
[dependencies]
crude_cache = "0.1.1"
示例用法
use crude_cache::CrudeCache;
#[derive(Clone)]
pub struct DataService {
cache: Arc<CrudeCache>,
db: Arc<Db>
}
impl DataService {
pub async fn get_big_data(&self) -> SomeBigType {
self.cache.get_or_else_update("big_data", Duration::from_secs(60), || self.db.big_data()).await
}
pub async fn get_other_data(&self) -> OtherType {
self.cache.get_or_else_update("other_data", Duration::from_secs(60), || self.db.other_data()).await
}
}
类似 Crates
更复杂的替代方案
依赖项
~2.3–4MB
~65K SLoC