A five-step order flow dies after step three: the card is charged, the stock is held, and the process that knew what came next is gone. Sagas, outboxes, and idempotency keys are how we've survived that crash for a decade — by hand-building a state machine every single time. Durable execution flips the model: write the flow as straight-line code, and let an engine replay it back to the exact line where it died.
Most teams use Redis for one thing and miss the four others. Rate limiting, distributed locks, idempotency, ephemeral session storage, and a serviceable job queue — each in a few commands, each replacing something heavier.
Placing an order touches four services and four databases. There's no @Transactional block stretched across all of them. So what happens when payment succeeds but inventory is empty? Here's the saga pattern, its two flavors, and the hard truths nobody warns you about.