redis/go-redis · error
redis: unexpected EXEC reply %q
Error message
redis: unexpected EXEC reply %q
What it means
Error "redis: unexpected EXEC reply %q" thrown in redis/go-redis.
Source
Thrown at osscluster.go:2757
cmd.SetErr(err)
if firstFatal == nil {
firstFatal = err
}
}
// EXEC reply. ReadLine parses error lines into typed errors, so a non-nil
// err means EXEC returned an error rather than the result array.
c.txProcessPush(ctx, node, cn, rd)
line, err := rd.ReadLine()
if err != nil {
if !isRedisError(err) {
return c.txReadFatal(err) // IO error
}
return c.classifyExecError(err, firstRedirect, firstFatal)
}
if line[0] != proto.RespArray {
err := fmt.Errorf("redis: unexpected EXEC reply %q", line)
setCmdsErr(cmds, err)
// A non-array aggregate reply may carry an unread payload.
return &txOutcome{kind: txFatal, err: err, unreadReplies: true}
}
// Success: read the N command results.
if err := node.Client.pipelineReadCmds(ctx, cn, rd, cmds); err != nil && !isRedisError(err) {
return c.txReadFatal(err) // IO error mid-results
}
return &txOutcome{kind: txSuccess}
}
func (c *ClusterClient) txProcessPush(ctx context.Context, node *clusterNode, cn *pool.Conn, rd *proto.Reader) {
if err := node.Client.processPendingPushNotificationWithReader(ctx, cn, rd); err != nil {
internal.Logger.Printf(ctx, "push: error processing pending notifications before reading reply: %v", err)
}
}
View on GitHub (pinned to c5cad058c7)
When it happens
Trigger: Thrown at osscluster.go:2757 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of redis/go-redis@c5cad058c7 (2026-09-01).
Data as JSON: /api/errors/7dbfd2688eb415e7.
Report an issue: GitHub.