Composable resilience wrapper for Redis connections.
Stacks circuit breaker, retry, coalescing, and bulkhead patterns around a Redis connection. All patterns are optional -- include only what you need.
Requires {:ex_resilience, "~> 0.4"} in your dependencies.
Usage
# Full resilience stack
{:ok, r} = Redis.Resilience.start_link(
port: 6379,
retry: [max_attempts: 3, backoff: :exponential],
circuit_breaker: [failure_threshold: 5, reset_timeout: 5_000],
coalesce: true,
bulkhead: [max_concurrent: 50]
)
# Same API as a regular connection
Redis.Resilience.command(r, ["GET", "key"])
Redis.Resilience.pipeline(r, [["GET", "a"], ["GET", "b"]])
# Inspect the stack
Redis.Resilience.info(r)Composition Order (inside -> outside)
Connection -> Retry -> CircuitBreaker -> Coalesce -> Bulkhead
^ retries transient errors
^ fails fast when unhealthy
^ deduplicates concurrent requests
^ limits concurrencyOptions
- All
Redis.Connectionoptions (host, port, password, etc.) :retry- keyword opts forExResilience.Retry, orfalse:circuit_breaker- keyword opts forExResilience.CircuitBreaker, orfalse:coalesce-trueor keyword opts, orfalse:bulkhead- keyword opts forExResilience.Bulkhead, orfalse:chaos- keyword opts forExResilience.Chaos(test only), orfalse
Summary
Functions
Returns a specification to start this module under a supervisor.
Executes a Redis command through the resilience stack.
Returns info about the resilience stack.
Functions
Returns a specification to start this module under a supervisor.
See Supervisor.
Executes a Redis command through the resilience stack.
Pipeline calls run in the caller's process so that concurrency-limiting layers (bulkhead) work correctly across concurrent callers.
Returns info about the resilience stack.