redis/redis-rb · error · Redis::Distributed::CannotDistribute
EXEC cannot be used in Redis::Distributed because the keys i
Error message
EXEC cannot be used in Redis::Distributed because the keys involved need to be on the same server or because we cannot guarantee that the operation will be atomic.
What it means
Error "EXEC cannot be used in Redis::Distributed because the keys involved need to be on the same server or because we cannot guarantee that the operation will be atomic." thrown in redis/redis-rb.
Source
Thrown at lib/redis/distributed.rb:1337
result = node_for(@watch_key).unwatch
@watch_key = nil
result
end
def pipelined
raise CannotDistribute, :pipelined
end
# Mark the start of a transaction block.
def multi(&block)
raise CannotDistribute, :multi unless @watch_key
node_for(@watch_key).multi(&block)
end
# Execute all commands issued after MULTI.
def exec
raise CannotDistribute, :exec unless @watch_key
result = node_for(@watch_key).exec
@watch_key = nil
result
end
# Discard all commands issued after MULTI.
def discard
raise CannotDistribute, :discard unless @watch_key
result = node_for(@watch_key).discard
@watch_key = nil
result
end
# Control remote script registry.
def script(subcommand, *args)
on_each_node(:script, subcommand, *args)View on GitHub (pinned to 2ba9010b91)
Solutions
- Do not call exec on Redis::Distributed; transactions are not supported across shards.
- Restructure the code to avoid MULTI/EXEC, or run it against a single-node connection.
When it happens
Trigger: Thrown at lib/redis/distributed.rb:1337 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of redis/redis-rb@2ba9010b91 (2026-08-23).
Data as JSON: /api/errors/b7b2b4379e07fed9.
Report an issue: GitHub.