pub struct MultiResourceLock { /* private fields */ }
Expand description
A distributed mutual exclusion lock backed by Redis.
Supports exclusion based on multiple resources and partial overlaps.
E.g. a lock on resources ["a", "b"]
will block a lock on ["a"]
or ["b", "c"]
.
Implementations§
source§impl MultiResourceLock
impl MultiResourceLock
sourcepub fn new(client: Client) -> RedisResult<Self>
pub fn new(client: Client) -> RedisResult<Self>
sourcepub async fn acquire_default(
&mut self,
resources: &[String],
) -> RedisResult<Option<String>>
pub async fn acquire_default( &mut self, resources: &[String], ) -> RedisResult<Option<String>>
Calls MultiResourceLock::acquire
with DEFAULT_EXPIRATION
, DEFAULT_TIMEOUT
and DEFAULT_SLEEP
.
§Errors
When MultiResourceLock::acquire
errors.
sourcepub async fn acquire(
&mut self,
resources: &[String],
expiration: Duration,
timeout: Duration,
sleep: Duration,
) -> RedisResult<Option<String>>
pub async fn acquire( &mut self, resources: &[String], expiration: Duration, timeout: Duration, sleep: Duration, ) -> RedisResult<Option<String>>
Attempts to acquire the lock blocking until the lock can be acquired.
Blocks up to timeout
duration making attempts every sleep
duration.
Returns None
when it times out.
§Errors
When MultiResourceLock::try_acquire
errors.
sourcepub async fn try_acquire_default(
&mut self,
resources: &[String],
) -> RedisResult<Option<String>>
pub async fn try_acquire_default( &mut self, resources: &[String], ) -> RedisResult<Option<String>>
Calls MultiResourceLock::try_acquire
with DEFAULT_EXPIRATION
.
§Errors
When MultiResourceLock::try_acquire
errors.
sourcepub async fn try_acquire(
&mut self,
resources: &[String],
expiration: Duration,
) -> RedisResult<Option<String>>
pub async fn try_acquire( &mut self, resources: &[String], expiration: Duration, ) -> RedisResult<Option<String>>
Attempts to acquire the lock returning immediately if it cannot be immediately acquired.
§Errors
- When the
acquire_lock
function is missing from the Redis instance.
sourcepub async fn release(&mut self, lock_id: &str) -> RedisResult<usize>
pub async fn release(&mut self, lock_id: &str) -> RedisResult<usize>
Releases a held lock.
§Errors
- When the
release_lock
function is missing from the Redis instance. - When
lock_id
does not refer to a held lock.
sourcepub async fn try_lock_default(
&mut self,
resources: &[String],
) -> RedisResult<Option<MultiResourceGuard<'_>>>
pub async fn try_lock_default( &mut self, resources: &[String], ) -> RedisResult<Option<MultiResourceGuard<'_>>>
Calls MultiResourceLock::try_lock
with DEFAULT_EXPIRATION
.
§Errors
When MultiResourceLock::try_lock
errors.
sourcepub async fn try_lock(
&mut self,
resources: &[String],
expiration: Duration,
) -> RedisResult<Option<MultiResourceGuard<'_>>>
pub async fn try_lock( &mut self, resources: &[String], expiration: Duration, ) -> RedisResult<Option<MultiResourceGuard<'_>>>
Attempts to acquire the lock returning immediately if it cannot be immediately acquired.
Wraps the result in a guard that releases the lock when dropped.
§Errors
When MultiResourceLock::try_acquire
errors.
sourcepub async fn lock_default(
&mut self,
resources: &[String],
) -> RedisResult<Option<MultiResourceGuard<'_>>>
pub async fn lock_default( &mut self, resources: &[String], ) -> RedisResult<Option<MultiResourceGuard<'_>>>
Calls MultiResourceLock::lock
with DEFAULT_EXPIRATION
, DEFAULT_TIMEOUT
and DEFAULT_SLEEP
.
§Errors
When MultiResourceLock::lock
errors.
sourcepub async fn lock(
&mut self,
resources: &[String],
expiration: Duration,
timeout: Duration,
sleep: Duration,
) -> RedisResult<Option<MultiResourceGuard<'_>>>
pub async fn lock( &mut self, resources: &[String], expiration: Duration, timeout: Duration, sleep: Duration, ) -> RedisResult<Option<MultiResourceGuard<'_>>>
Attempts to acquire the lock blocking until the lock can be acquired.
Blocks up to timeout
duration making attempts every sleep
duration.
Returns None
when it times out.
Wraps the result in a guard that releases the lock when dropped.
§Errors
When MultiResourceLock::acquire
errors.