28个稳定版本 (13个主要版本)

13.0.0 2024年2月15日
12.0.0 2023年10月7日
11.7.1 2023年9月11日
11.6.0 2023年5月21日
0.2.0 2019年6月9日

#1 in #content-addressable

Download history 12129/week @ 2024-04-23 8761/week @ 2024-04-30 10460/week @ 2024-05-07 8452/week @ 2024-05-14 10367/week @ 2024-05-21 11436/week @ 2024-05-28 9752/week @ 2024-06-04 11008/week @ 2024-06-11 9942/week @ 2024-06-18 9618/week @ 2024-06-25 7432/week @ 2024-07-02 8124/week @ 2024-07-09 8259/week @ 2024-07-16 10542/week @ 2024-07-23 11598/week @ 2024-07-30 11408/week @ 2024-08-06

每月下载43,111次
62 个crate中使用 (16个直接使用)

Apache-2.0

170KB
3.5K SLoC

cacache CI crates.io

一个高性能、并发、内容可寻址的磁盘缓存,针对异步API进行优化。

示例

use cacache;
use async_attributes;

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

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

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

    // Clean up the data!
    cacache::rm::all(&dir).await?;
}

安装

使用 cargo-edit

$cargo add cacache

最低支持的Rust版本是 1.43.0

文档

特性

  • 一流异步支持,可以使用 async-stdtokio 作为其运行时。同步API可用但次要。您也可以仅使用同步API并移除异步运行时依赖。
  • std::fs 风格API
  • 按键或按内容地址(shasum等)提取
  • 子资源完整性 网络标准支持
  • 多哈希支持 - 在单个缓存中安全地托管sha1、sha512等
  • 自动内容去重
  • 即使对于大型数据也支持原子内容写入
  • 容错性(免受损坏、部分写入、进程竞态等影响)
  • 读取和写入的一致性保证(完整数据验证)
  • 无锁、高并发缓存访问
  • 非常有用的上下文错误消息
  • 支持大文件
  • 非常快
  • 任意元数据存储
  • 跨平台:支持Windows和大小写不敏感的文件系统
  • miette 集成,提供详细、有用的错误报告。
  • 打败纳粹

async-std 是默认的异步运行时。若要使用 tokio,请关闭默认功能并启用 tokio-runtime 功能,如下所示

[dependencies]
cacache = { version = "*", default-features = false, features = ["tokio-runtime", "mmap"] }

您也可以完全移除异步 API,包括移除异步运行时依赖

[dependencies]
cacache = { version = "*", default-features = false, features = ["mmap"] }

通过 "link_to" 功能提供对现有文件符号链接的实验性支持。

贡献

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

本项目所有参与者和维护者都应遵循 行为准则,并且相互之间要友好。

祝您编程愉快!

MSRV

cacache 最低支持的 Rust 版本为 1.67.0。任何对 MSRV 的更改都将被视为破坏性更改。

许可

本项目的许可协议为 Apache-2.0 许可协议

依赖项

~7–37MB
~566K SLoC