Redis Streams · Redis systems note
Redis 8.6 Streams Finally Address the Producer Retry Ambiguity Directly
A producer can time out after XADD without knowing whether Redis accepted the entry. Redis 8.6 adds stream idempotency so retries can be recognized without creating duplicate entries.
A distributed producer has a classic ambiguity: send XADD, Redis accepts it, then the response disappears because the network breaks. The client sees a timeout and cannot tell whether the event exists.
Retrying used to mean duplicate risk
A blind retry can append the same logical event twice with different stream IDs. Applications usually solved this by putting their own event UUID in the payload and deduplicating later.
Redis 8.6 adds idempotent production
Redis 8.6 introduces IDMP and IDMPAUTO options for Streams. The producer can associate an idempotency identity with the logical write so a retry can be recognized.
This closes one specific boundary: client-to-stream production ambiguity.
It is not exactly-once processing
A consumer can still execute an external side effect and crash before XACK. Another consumer can reclaim and process the entry again. Producer dedupe and consumer idempotency protect different boundaries.
The ID must be created before the retry loop
If the application generates a new UUID for each attempt, Redis cannot know those attempts represent the same logical event. The idempotency identity belongs to the business operation, not the TCP request.
Retries still need backoff
Idempotency makes retries safer, not cheap. An unavailable Redis node can still cause thousands of clients to hammer recovery with synchronized retries. Use exponential backoff, jitter and upstream pressure limits.
Measure deduplicated attempts
A rising dedupe count can expose flaky networks, too-short client timeouts, overloaded servers or retry bugs even while stream length appears normal.
The important improvement is explicit semantics. Redis can now participate directly in the producer retry contract instead of forcing every application to build the first layer of deduplication itself.