#cache #file #binary-encoding #serialization #age #tracing #read

tinycache

最小化文件缓存,支持二进制序列化

1 个不稳定版本

0.1.0 2023年8月7日

#2194编码

MIT/Apache

11KB
219 行代码(不含注释)

tinycache

特性

tinycache 是一个最小化文件缓存,支持二进制序列化

  • 使用 get_cached_or_fetch 进行回退
  • 二进制序列化
  • 可选的最大存储值有效期
  • 可选的跟踪功能
  • 如果读取失败则无效化(用于快速迭代)
  • 使用 sha1 确保 URI 安全
  • 4 个依赖(serde, bincode, tracing, sha1)

特性概述

获取缓存或获取模式(读取,如果旧或不可兼容则无效化,如果不存在则获取和写入)

let cache_ref = TinyRef::new().max_age(Duration::from_secs(max_age_secs));
let expensive_value = cache_ref.get_cached_or_fetch(item_key, move || fetch_value());

读取,写入(ya)

let cache_ref = TinyRef::new();
// write does not return result, it logs tracing if there is an issue
// found that to be more useful
cache_ref.write(key.clone(), &token);
if let Some(v) = cache_ref.read::<Token>(key.clone()) {
    println!("got {:?}", v);
}

底层使用 bincode 进行小文件快速读写

let bytes = bincode::serialize(value).map_err(StoreErr::ser)?;

使用 sha1 格式化项目键

fn fmt_key(k: String) -> Vec<u8> {
    let mut hasher = Sha1::new();
    hasher.update(k.as_bytes());
    hasher.finalize().to_vec()
}

可以通过特性禁用跟踪依赖和日志记录

[features]
default = ["tracing"]
tracing = ["dep:tracing"]

依赖项

~1.3–2MB
~45K SLoC