1
0
Fork
You've already forked cacache-rs
0
A high-performance, concurrent, content-addressable disk cache, with support for both sync and async APIs. 💩💵 but for your 🦀 https://crates.io/crates/cacache
  • Rust 99.4%
  • Just 0.6%
2024年11月26日 01:34:26 -08:00
.github fix(sync): Added the feature flags for compilation without the async runtime. Fixes #64 . ( #65 ) 2024年02月12日 09:55:58 -08:00
benches feat(reflink): Separate reflink behavior into their own functions ( #58 ) 2023年10月07日 12:39:39 -07:00
src fix(tokio): add safe access join handles ( #85 ) 2024年06月25日 08:42:11 -07:00
.gitignore meta: remove Cargo.lock from git 2019年12月16日 18:54:59 -08:00
Cargo.toml chore: Release cacache version 13.1.0 2024年11月26日 01:34:26 -08:00
CHANGELOG.md docs: update changelog 2024年11月26日 01:33:00 -08:00
cliff.toml meta: add publishing bits 2021年09月15日 19:42:52 -07:00
CODE_OF_CONDUCT.md doc(readme): filled out README; added CoC and CONTRIBUTING.md 2019年07月01日 00:04:52 -07:00
CONTRIBUTING.md doc(readme): filled out README; added CoC and CONTRIBUTING.md 2019年07月01日 00:04:52 -07:00
justfile feature(async): Add tokio as an executor option ( #36 ) 2023年01月28日 13:01:59 -08:00
LICENSE.md feat(license): change license to Apache-2.0 2021年09月15日 19:52:50 -07:00
Makefile.toml meta: add publishing bits 2021年09月15日 19:42:52 -07:00
README.md docs: Fix readme badges ( #68 ) 2024年04月06日 19:42:19 -07:00

cacache CI crates.io

A high-performance, concurrent, content-addressable disk cache, optimized for async APIs.

Example

usecacache;useasync_attributes;#[async_attributes::main]asyncfn main()-> Result<(),cacache::Error>{letdir=String::from("./my-cache");// Write some data!
cacache::write(&dir,"key",b"my-async-data").await?;// Get the data back!
letdata=cacache::read(&dir,"key").await?;assert_eq!(data,b"my-async-data");// Clean up the data!
cacache::rm::all(&dir).await?;}

Install

Using cargo-edit

$ cargo add cacache

Minimum supported Rust version is 1.43.0.

Documentation

Features

  • First-class async support, using either async-std or tokio as its runtime. Sync APIs are available but secondary. You can also use sync APIs only and remove the async runtime dependency.
  • std::fs-style API
  • Extraction by key or by content address (shasum, etc)
  • Subresource Integrity web standard support
  • Multi-hash support - safely host sha1, sha512, etc, in a single cache
  • Automatic content deduplication
  • Atomic content writes even for large data
  • Fault tolerance (immune to corruption, partial writes, process races, etc)
  • Consistency guarantees on read and write (full data verification)
  • Lockless, high-concurrency cache access
  • Really helpful, contextual error messages
  • Large file support
  • Pretty darn fast
  • Arbitrary metadata storage
  • Cross-platform: Windows and case-(in)sensitive filesystem support
  • miette integration for detailed, helpful error reporting.
  • Punches nazis

async-std is the default async runtime. To use tokio instead, turn off default features and enable the tokio-runtime feature, like this:

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

You can also remove async APIs altogether, including removing async runtime dependency:

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

Experimental support for symlinking to existing files is provided via the "link_to" feature.

Contributing

The cacache team enthusiastically welcomes contributions and project participation! There's a bunch of things you can do if you want to contribute! The Contributor Guide has all the information you need for everything from reporting bugs to contributing entire new features. Please don't hesitate to jump in if you'd like to, or even ask us questions if something isn't clear.

All participants and maintainers in this project are expected to follow Code of Conduct, and just generally be excellent to each other.

Happy hacking!

MSRV

The Minimum Supported Rust Version for cacache is 1.67.0. Any changes to the MSRV will be considered breaking changes.

License

This project is licensed under the Apache-2.0 License.