pub struct RedisDistributedLock { /* private fields */ }Expand description
Redis-based distributed lock implementation
Uses Redis atomic operations and LUA scripts to implement distributed locking with proper ownership semantics and automatic expiration.
Implementations§
Source§impl RedisDistributedLock
impl RedisDistributedLock
Sourcepub async fn new(redis_url: &str) -> StateResult<Self>
pub async fn new(redis_url: &str) -> StateResult<Self>
Sourcepub async fn with_config(
redis_url: &str,
prefix: &str,
retry_config: RetryConfig,
) -> StateResult<Self>
pub async fn with_config( redis_url: &str, prefix: &str, retry_config: RetryConfig, ) -> StateResult<Self>
Create a new Redis distributed lock with custom configuration
§Arguments
redis_url- Redis connection URLprefix- Key prefix for locks (e.g., “app:lock:”)retry_config- Retry configuration for lock acquisition
Trait Implementations§
Source§impl Debug for RedisDistributedLock
impl Debug for RedisDistributedLock
Source§impl DistributedLock for RedisDistributedLock
impl DistributedLock for RedisDistributedLock
Source§fn acquire<'life0, 'life1, 'async_trait>(
&'life0 self,
resource: &'life1 str,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = StateResult<LockGuard>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn acquire<'life0, 'life1, 'async_trait>(
&'life0 self,
resource: &'life1 str,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = StateResult<LockGuard>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Acquire a lock for the given resource Read more
Source§fn try_acquire<'life0, 'life1, 'async_trait>(
&'life0 self,
resource: &'life1 str,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = StateResult<Option<LockGuard>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn try_acquire<'life0, 'life1, 'async_trait>(
&'life0 self,
resource: &'life1 str,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = StateResult<Option<LockGuard>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Try to acquire a lock without blocking Read more
Source§fn release_internal<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
resource: &'life1 str,
token: &'life2 LockToken,
) -> Pin<Box<dyn Future<Output = StateResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn release_internal<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
resource: &'life1 str,
token: &'life2 LockToken,
) -> Pin<Box<dyn Future<Output = StateResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Internal release method (used by Drop)
Source§fn is_locked<'life0, 'life1, 'async_trait>(
&'life0 self,
resource: &'life1 str,
) -> Pin<Box<dyn Future<Output = StateResult<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn is_locked<'life0, 'life1, 'async_trait>(
&'life0 self,
resource: &'life1 str,
) -> Pin<Box<dyn Future<Output = StateResult<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Check if a resource is currently locked Read more
Source§fn extend<'life0, 'life1, 'async_trait>(
&'life0 self,
guard: &'life1 mut LockGuard,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = StateResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn extend<'life0, 'life1, 'async_trait>(
&'life0 self,
guard: &'life1 mut LockGuard,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = StateResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Extend the TTL of an existing lock Read more
Auto Trait Implementations§
impl !RefUnwindSafe for RedisDistributedLock
impl !UnwindSafe for RedisDistributedLock
impl Freeze for RedisDistributedLock
impl Send for RedisDistributedLock
impl Sync for RedisDistributedLock
impl Unpin for RedisDistributedLock
impl UnsafeUnpin for RedisDistributedLock
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::RequestSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.