4 releases (2 breaking)
new 0.5.1 | Nov 24, 2024 |
---|---|
0.5.0 | Nov 23, 2024 |
0.4.0 | Nov 13, 2024 |
0.3.0 | Oct 24, 2024 |
0.1.2 |
|
#535 in Database interfaces
304 downloads per month
48KB
908 lines
redis-lock
Rusty distributed locking backed by Redis.
// 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 does operations that require exclusive access to multiple resources.
Similar work
lib.rs
:
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
Dependencies
~8–19MB
~236K SLoC