#锁定 #分布式 #Redis #异步

重锁

使用Redis进行分布式异步锁定

3个版本

0.1.2 2021年8月28日
0.1.1 2021年8月22日
0.1.0 2021年8月22日

#1698异步

MIT 许可证

13KB
230

relock

使用Redis进行分布式异步锁定

描述

在许多环境中,不同进程必须以互斥的方式操作共享资源,分布式锁是一个非常有用的原语。此crate实现了Redis文档中描述的“具有单个实例的正确实现”算法。

安装

relock作为依赖项添加到您的项目的cargo.toml文件中

[dependencies]
relock = "0.1.2"

如果您已安装cargo-edit实用工具,请使用

$ cargo add relock

用法

lock

use relock::Relock;

let relock = Relock::new("redis://127.0.0.1/").unwrap();
let lock_key = "foo-lock";
let time_to_live = 10_000;
let retry_count = 5;
let retry_delay = 200;

// Acquire the lock. If the lock is bussy, this method will retry
// `retry_count` times with a delay of `retry_delay` milliseconds between
// each retry.
let lock = relock.lock(lock_key, time_to_live, retry_count, retry_delay).await.unwrap();
// Do work.
relock.unlock(lock_key, lock.id).await.unwrap();

try_lock

use relock::Relock;

let relock = Relock::new("redis://127.0.0.1/").unwrap();
let lock_key = "foo-try-lock";
let time_to_live = 10_000;

// Acquire the lock. If the lock is bussy, this method will return a Lock
// Error. Consider waiting a bit before retrying or use `lock` method instead.
let lock = relock.try_lock(lock_key, time_to_live).await.unwrap();
// Do work.
relock.unlock(lock_key, lock.id).await.unwrap();

依赖项

~5–14MB
~198K SLoC