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§
- sync
sync
Synchronous implementation of the lock.
Structs§
- Options to configure
lock_across
. - A distributed mutual exclusion lock backed by Redis.
Enums§
- Error for
MultiResourceLock::map
.
Constants§
- The default duration to attempt to acquire the lock.
- Default expiration duration for the lock.
- The default delay between retries when attempting to acquire the lock.
- Default sleep duration between attempts to acquire the lock.
- Default timeout duration for acquiring the lock.
- The default time-to-live for the lock.
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§
- Re-export of
redis::RedisError
. - Mimic of
redis::RedisResult
.