#sync #cache #read #content-addressable #write #read-write #cacache

cacache-sync

同步的、内容可寻址的、键值对、高性能、磁盘缓存

1 个稳定版本

11.0.0 2023年1月24日

#216 in 缓存

Apache-2.0

48KB
943

cacache-sync CI crates.io

一个高性能、并发、内容可寻址的磁盘缓存,仅提供同步API。

注意

这是一个位于这里的 cacache crate 的分支: https://github.com/zkat/cacache-rs,它移除了所有异步代码和依赖项,并将同步API作为主要使用方式(无需 _sync 后缀)。

动机非常简单 —— 在另一个项目中,我使用了 cacache,我只依赖于同步API。我似乎仍在支付与异步相关依赖项的成本,因此这个分支主要面向那些肯定只使用同步API的人。我不确定这些节省如何跨其他项目进行转换,但调试构建的编译时间降低了约33%。

这个分支可能只会得到有限的支持 —— 我看不到这里需要更改同步实现的地方。如果您想看到这里的更改,您可能应该将其推送到原始项目(并考虑支持它)。

示例

use cacache_sync;

async fn main() -> Result<(), cacache_sync::Error> {
    let dir = String::from("./my-cache");

    // Write some data!
    cacache_sync::write(&dir, "key", b"my-async-data")?;

    // Get the data back!
    let data = cacache_sync::read(&dir, "key")?;
    assert_eq!(data, b"my-async-data");

    // Clean up the data!
    cacache_sync::clear(&dir)?;
}

安装

使用 cargo-edit

$cargo add cacache-sync

最低支持的Rust版本是 1.66.1

文档

功能

  • 同步API是主要API。
  • std::fs 风格API
  • 通过键或内容地址(shasum等)提取
  • 子资源完整性 网络标准支持
  • 多哈希支持 - 在单个缓存中安全地托管 sha1、sha512 等
  • 自动内容去重
  • 即使对于大量数据,内容写入也是原子的
  • 容错性(免受损坏、部分写入、进程竞态等影响)
  • 读写一致性保证(完整数据验证)
  • 非常实用的上下文错误信息
  • 支持大文件
  • 非常快
  • 任意元数据存储
  • 跨平台:支持Windows和大小写不敏感的文件系统
  • 对抗纳粹

贡献

cacache 团队热情欢迎贡献和项目参与!如果您想贡献,有很多事情可以做!有关从报告错误到贡献全新功能的所有信息,请参阅贡献指南。如果您愿意,请不要犹豫加入我们,或者如果您有什么不清楚的地方,也可以向我们提问。

本项目中的所有参与者和维护者都应遵守行为准则,并相互友好相处。

祝您愉快地编码!

许可证

本项目采用Apache-2.0许可证

依赖关系

~3–12MB
~161K SLoC