8 个版本 (4 个重大更新)
1.0.0-alpha.1 |
|
---|---|
0.4.0 | 2024 年 6 月 18 日 |
0.3.0 | 2024 年 2 月 13 日 |
0.2.2 | 2023 年 9 月 7 日 |
0.0.4 | 2022 年 9 月 26 日 |
在 数据库接口 中排名 #278
每月下载量 2,082
29KB
546 行(不包括注释)
rslock - Rust 中的 Redis Redlock
这是基于 Redis 的 Redlock 分布式锁机制的实现。
特性
- 锁扩展
- 异步运行时支持(async-std 和 tokio)
- 异步 Redis
安装
cargo add rslock
[!NOTE] 此 crate 的默认功能将提供 async-std。您可以在安装时通过提供
tokio-comp
功能标志来选择使用 tokio,但 tokio 有一些限制,无法访问 API 的某些部分(了解更多信息)。
构建
cargo build --release
使用方法
use std::time::Duration;
use rslock::LockManager;
#[tokio::main]
async fn main() {
let rl = LockManager::new(vec![
"redis://127.0.0.1:6380/",
"redis://127.0.0.1:6381/",
"redis://127.0.0.1:6382/",
]);
let lock;
loop {
// Create the lock
if let Ok(l) = rl
.lock("mutex".as_bytes(), Duration::from_millis(1000))
.await
{
lock = l;
break;
}
}
// Extend the lock
match rl.extend(&lock, Duration::from_millis(1000)).await {
Ok(_) => println!("lock extended!"),
Err(_) => println!("lock couldn't be extended"),
}
// Unlock the lock
rl.unlock(&lock).await;
}
扩展锁
扩展锁实际上是在刷新其持续时间,而不是向其添加额外时间。例如,如果一个 1000ms 的锁在 500ms 后扩展了 1000ms,它将总共持续 1500ms,而不是 2000ms。这种方法与 Node.js Redlock 实现 保持一致。请参阅 扩展脚本。
测试
使用以下命令运行测试
cargo test
贡献
如果您发现错误或想以其他方式帮助,请 提交问题。
许可证
BSD。请参阅 LICENSE。
依赖关系
~6–21MB
~268K SLoC