Crate redis_lock

Source
Expand description

Rusty distributed locking backed by Redis.

§Locking a single resource

let connection = Arc::new(Mutex::new(
    client.get_multiplexed_async_connection().await?
));
// Execute a function with the lock.
redis_lock::lock_across(
    &[connection],
    "account1",
    async move { /* .. */ },
    redis_lock::LockAcrossOptions::default()
).await?;

§Locking multiple resources

// Setup.
redis_lock::setup(&client).await?;
// Get lock.
let mut lock = redis_lock::MultiResourceLock::new(client.clone())?;
let resources = vec![String::from("account1"), String::from("account2")];
// Execute a function with the lock.
lock.map_default(&resources, async move { /* .. */ }).await?;

§Vs rslock

I would recommend this library over rslock when:

  • your application is focussed on async.
  • your application does operations that require exclusive access to multiple resources.

§Similar work

Modules§

  • syncsync
    Synchronous implementation of the lock.

Structs§

Enums§

Constants§

Functions§

  • Executes a function while locking on a single resource using the RedLock algorithm.
  • Initializes a Redis instance with the Lua library functions required for locking.

Type Aliases§