relock

Distributed async locking using Redis

Description

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.

Install

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

Usage

lock

```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(); ```

try_lock

```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(); ```