Back to results for “Distributed Locks with Redis”
Redis › Redis as a Message Queue

What patterns help ensure exactly once or at least once processing semantics when using Redis as a message queue for critical tasks?

Advanced

Answer

For at least once processing, you use a reliable pattern like moving tasks into a dedicated processing list while they are being worked on, using RPOPLPUSH or LMOVE, so a crashed worker's tasks remain visible and can be retried, while achieving true exactly once processing generally requires additional application level logic like idempotency keys to safely handle the rare case of a task being processed more than once.
RPOPLPUSH tasks processing
-- Process the task
-- Use an idempotency key to safely handle potential duplicate processing
SET processed:task123 1 NX
Real-world example A payment processing system combines a reliable queue pattern with idempotency keys, ensuring that even if a task is accidentally processed twice due to a worker crash and retry, the customer is never charged more than once.

Common follow-ups: What is an idempotency key, and how does it prevent duplicate processing side effects?;Why is true exactly once delivery considered very difficult to achieve in distributed systems?