2个版本

0.5.1 2024年4月29日
0.5.0 2024年4月29日

#89 in 压缩

MIT许可

80KB
2K SLoC

bincache

Backed by Zitane Labs Powered by Rust crates.io: bincache MSRV: 1.65 License: MIT

概述

  • 简单的API
  • 灵活的缓存大小、限制和驱逐
  • 针对不同用例的多重缓存策略
  • 支持缓存压缩
  • 尽力缓存恢复

缓存策略

Bincache使用策略模式以允许不同的缓存策略

  • 内存缓存
  • 磁盘后缓存
  • 混合缓存(内存+磁盘后)
  • 通过CacheStrategy实现自定义策略

压缩算法

Bincache支持各种压缩算法

  • Gzip(功能:comp_gzip
  • Brotli(功能:comp_brotli
  • Zstandard(功能:comp_zstd
  • 通过CompressionStrategy实现自定义算法

异步运行时

Bincache支持多个异步运行时

  • Futures兼容(默认)
  • Tokio 1.x(功能:rt_tokio_1
  • Async-Std 1.x(功能:rt_async-std_1

用法

  1. bincache添加到您的项目

    cargo add bincache                            # use blocking I/O
    cargo add bincache --features rt_tokio_1      # enable tokio 1.x support
    cargo add bincache --features rt_async-std_1  # enable async-std 1.x support
    
  2. 使用您首选的策略创建一个Cache实例

    #[tokio::main(flavor = "current_thread")]
    async fn main() -> Result<(), Box<dyn std::error::Error>> {
        let mut cache = bincache::MemoryCacheBuilder::default().build().await?;
    
        // Put a key-value pair into the cache
        cache.put(&"foo", b"foo".to_vec()).await?;
    
        // Read the value back out
        let foo = cache.get(&"foo").await?;
    
        // Make sure it's the same
        assert_eq!(foo, b"foo".as_slice());
    
        Ok(())
    }
    
  3. 就这些!

库功能

  • blocking - 启用阻塞stdlib I/O
  • rt_tokio_1 - 启用tokio 1.x支持
  • rt_async-std_1 - 启用async-std 1.x支持
  • comp_zstd - 启用zstd压缩支持
  • comp_gzip - 启用gzip压缩支持
  • comp_brotli - 启用brotli压缩支持

默认情况下,我们启用了一个“软”的implicit-blocking功能,它只在没有启用其他运行时功能时使用阻塞I/O。

您可以通过启用blocking功能来显式选择阻塞I/O,这将禁止使用rt_tokio_1rt_async-std_1

依赖项

~0.6–16MB
~186K SLoC