pub struct RedisResultBackend { /* private fields */ }Expand description
Redis-backed result storage.
Results are stored as JSON strings with a configurable TTL (default 24 hours).
Group operations (complete_group_member) use a Lua script to atomically
increment the completed count and push the result, preventing races when
multiple workers finish group members concurrently.
Implementations§
Source§impl RedisResultBackend
impl RedisResultBackend
Sourcepub async fn new(config: RedisConfig) -> Result<RedisResultBackend, KojinError>
pub async fn new(config: RedisConfig) -> Result<RedisResultBackend, KojinError>
Create a new Redis result backend.
Builds a deadpool_redis connection pool from the given config and
verifies connectivity by acquiring one connection. The default result
TTL is 24 hours; override with with_ttl.
Sourcepub fn with_ttl(self, ttl: Duration) -> RedisResultBackend
pub fn with_ttl(self, ttl: Duration) -> RedisResultBackend
Override the result TTL (time-to-live).
Results older than this duration are automatically expired by Redis. Defaults to 24 hours if not called.
Trait Implementations§
Source§impl ResultBackend for RedisResultBackend
impl ResultBackend for RedisResultBackend
Source§fn store<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 TaskId,
result: &'life2 Value,
) -> Pin<Box<dyn Future<Output = Result<(), KojinError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
RedisResultBackend: 'async_trait,
fn store<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 TaskId,
result: &'life2 Value,
) -> Pin<Box<dyn Future<Output = Result<(), KojinError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
RedisResultBackend: 'async_trait,
Store a task result.
Source§fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 TaskId,
) -> Pin<Box<dyn Future<Output = Result<Option<Value>, KojinError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
RedisResultBackend: 'async_trait,
fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 TaskId,
) -> Pin<Box<dyn Future<Output = Result<Option<Value>, KojinError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
RedisResultBackend: 'async_trait,
Get a stored result.
Source§fn wait<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 TaskId,
timeout: Duration,
) -> Pin<Box<dyn Future<Output = Result<Value, KojinError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
RedisResultBackend: 'async_trait,
fn wait<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 TaskId,
timeout: Duration,
) -> Pin<Box<dyn Future<Output = Result<Value, KojinError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
RedisResultBackend: 'async_trait,
Wait for a result to be available, with timeout.
Source§fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 TaskId,
) -> Pin<Box<dyn Future<Output = Result<(), KojinError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
RedisResultBackend: 'async_trait,
fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 TaskId,
) -> Pin<Box<dyn Future<Output = Result<(), KojinError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
RedisResultBackend: 'async_trait,
Delete a stored result.
Source§fn init_group<'life0, 'life1, 'async_trait>(
&'life0 self,
group_id: &'life1 str,
total: u32,
) -> Pin<Box<dyn Future<Output = Result<(), KojinError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
RedisResultBackend: 'async_trait,
fn init_group<'life0, 'life1, 'async_trait>(
&'life0 self,
group_id: &'life1 str,
total: u32,
) -> Pin<Box<dyn Future<Output = Result<(), KojinError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
RedisResultBackend: 'async_trait,
Initialize a group with the expected total count.
Source§fn complete_group_member<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
group_id: &'life1 str,
_task_id: &'life2 TaskId,
result: &'life3 Value,
) -> Pin<Box<dyn Future<Output = Result<u32, KojinError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
RedisResultBackend: 'async_trait,
fn complete_group_member<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
group_id: &'life1 str,
_task_id: &'life2 TaskId,
result: &'life3 Value,
) -> Pin<Box<dyn Future<Output = Result<u32, KojinError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
RedisResultBackend: 'async_trait,
Mark a group member as complete and return the number of completed members.
Source§fn get_group_results<'life0, 'life1, 'async_trait>(
&'life0 self,
group_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<Value>, KojinError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
RedisResultBackend: 'async_trait,
fn get_group_results<'life0, 'life1, 'async_trait>(
&'life0 self,
group_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<Value>, KojinError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
RedisResultBackend: 'async_trait,
Get all results for a group.
Auto Trait Implementations§
impl Freeze for RedisResultBackend
impl !RefUnwindSafe for RedisResultBackend
impl Send for RedisResultBackend
impl Sync for RedisResultBackend
impl Unpin for RedisResultBackend
impl UnsafeUnpin for RedisResultBackend
impl !UnwindSafe for RedisResultBackend
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> 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 more