4 个版本 (2 个重大更改)

0.4.0 2024 年 7 月 4 日
0.3.0 2023 年 6 月 22 日
0.2.2 2023 年 1 月 10 日
0.1.0 2023 年 1 月 9 日

#252并发

Download history 121/week @ 2024-07-01 2/week @ 2024-07-08

每月 123 次下载

MIT 许可证

12KB
229 代码行

在 MongoDB 中实现分布式互斥锁。

Crates.io docs.rs

此 crate 仅包含异步实现。如果您需要同步版本,请使用 mongo-lock crate。

此实现依赖于系统时间。请确保您的服务器上的 NTP 客户端配置正确。

安装

将此 crate 添加到 Cargo.toml

[dependencies]
mongo_lock_async = "0"

使用方法

#[tokio::main]
async fn main() {
    let mongo = mongodb::Client::with_uri_str("mongodb://127.0.0.1").await.unwrap();

    // We need to ensure that mongodb collection has a proper index.
    mongo_lock_async::prepare_database(&mongo).await.unwrap();

    if let Ok(Some(lock)) =
        mongo_lock_async::Lock::try_acquire(
            &mongo,
            "my-key",
            std::time::Duration::from_secs(30)
        ).await
    {
        println!("Lock acquired.");

        // Release the lock before ttl expires to allow others to acquire it.
        lock.release().await.ok();
    }
}

依赖项

~15–26MB
~400K SLoC