Distributed async locking using Redis
Distributed locks are a very useful primitive in many environments where different processes must operate with shared resources in a mutually exclusive way. This crate implements the "Correct implementation with a single instance" algorithm described in the Redis documentation.
Add relock
as a dependency in the cargo.toml file of your project:
toml
[dependencies]
relock = "0.1.2"
If you have cargo-edit utility tool installed, use:
bash
$ cargo add relock
```rust use relock::Relock;
let relock = Relock::new("redis://127.0.0.1/").unwrap(); let lockkey = "foo-lock"; let timetolive = 10000; let retrycount = 5; let retrydelay = 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(lockkey, timetolive, retrycount, retrydelay).await.unwrap();
// Do work.
relock.unlock(lockkey, lock.id).await.unwrap();
```
```rust use relock::Relock;
let relock = Relock::new("redis://127.0.0.1/").unwrap(); let lockkey = "foo-try-lock"; let timetolive = 10000;
// 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.trylock(lockkey, timetolive).await.unwrap();
// Do work.
relock.unlock(lock_key, lock.id).await.unwrap();
```