6 个版本

0.3.1 2021年10月19日
0.3.0 2021年10月19日
0.2.0 2021年7月6日
0.1.2 2021年6月24日

#917 in 文件系统


用于 houseflow

MIT 许可证

20KB
287 代码行

Crates.io Crates.io docs.rs

szafka

Rust中的持久化数据存储。

用法

同步API用法

#[tokio::main]
async fn main() {
    use szafka::Szafka;
    use serde::{Serialize, Deserialize};
    
    #[derive(Debug, Clone, Serialize, Deserialize)]
    struct Something {
        name: String,
        id: u64,
    }
    
    let szafka = Szafka::new("/tmp/welcome-to-szafka");
    let something = Something {
        name: String::from("John"),
        id: 1000,
    };
    szafka.save(&something).expect("save failed");
    let retrieved = szafka.get().expect("get data failed");
    assert_eq!(something, retrieved);
}

异步API用法(启用 async 功能)

#[tokio::main]
async fn main() {
    use szafka::AsyncSzafka;
    use serde::{Serialize, Deserialize};
    
    #[derive(Debug, Clone, Serialize, Deserialize)]
    struct Something {
        name: String,
        id: u64,
    }
    
    let szafka = AsyncSzafka::new("/tmp/welcome-to-async-szafka");
    let something = Something {
        name: String::from("John"),
        id: 1000,
    };
    szafka.save(&something).await.expect("save failed");
    let retrieved = szafka.get().await.expect("get data failed");
    assert_eq!(something, retrieved);
}

更多信息请参阅文档

测试

所有测试: cargo test. 文档测试: cargo test --doc. 单元测试: cargo test --tests.

使用tarpaulin检查代码覆盖率。

cargo tarpaulin --lib
Oct 19 22:04:02.086  INFO cargo_tarpaulin::report: Coverage Results:
|| Tested/Total Lines:
|| src/async.rs: 70/79
|| src/sync.rs: 68/72
|| 
91.39% coverage, 138/151 lines covered

基准测试

使用cargo bench运行基准测试。

我的Optiplex 9020机器上的结果,该机器配备Intel i7-4790,NVMe,Linux 5.14

save                    time:   [7.3328 us 7.4197 us 7.5088 us]
get                     time:   [48.460 us 48.577 us 48.737 us]

async-save              time:   [22.558 us 22.745 us 22.930 us]
async-get               time:   [58.201 us 58.599 us 59.142 us]

为什么

我需要存储持久数据,如令牌或缓存数据,用于Houseflow CLI 应用程序

依赖关系

~0.7–2.6MB
~53K SLoC