go-redis/redis · error

redis: got %d elements in latency get, expected at least 4

Error message

redis: got %d elements in latency get, expected at least 4

What it means

Thrown by LatencyCmd.readReply (command.go:5849) while parsing LATENCY LATEST. Each entry must contain at least 4 fields (event-name, timestamp, latest-ms, max-ms); the parser reads all four, so a shorter entry is rejected. Trailing fields beyond the 4 are drained so newer servers don't desync the stream.

Source

Thrown at command.go:5849

func (cmd *LatencyCmd) String() string {
	cmd.await()
	return cmdString(cmd, cmd.val)
}

func (cmd *LatencyCmd) readReply(rd *proto.Reader) error {
	n, err := rd.ReadArrayLen()
	if err != nil {
		return err
	}
	cmd.val = make([]Latency, n)
	for i := 0; i < len(cmd.val); i++ {
		nn, err := rd.ReadArrayLen()
		if err != nil {
			return err
		}
		if nn < 4 {
			return fmt.Errorf("redis: got %d elements in latency get, expected at least 4", nn)
		}
		if cmd.val[i].Name, err = rd.ReadString(); err != nil {
			return err
		}
		createdAt, err := rd.ReadInt()
		if err != nil {
			return err
		}
		cmd.val[i].Time = time.Unix(createdAt, 0)
		latest, err := rd.ReadInt()
		if err != nil {
			return err
		}
		cmd.val[i].Latest = time.Duration(latest) * time.Millisecond
		maximum, err := rd.ReadInt()
		if err != nil {
			return err
		}

View on GitHub (pinned to 36d97525cd)

Solutions

  1. Confirm with `redis-cli LATENCY LATEST` that each entry is [event, ts, latest, max, ...].
  2. Remove any proxy that rewrites replies.
  3. Ensure latency monitoring is enabled server-side (`CONFIG SET latency-monitor-threshold <ms>`); without it you typically get an empty array rather than malformed entries, but misconfigured forks can still differ.
  4. Retry if the error is intermittent.
Defensive patterns

Strategy: try-catch

Validate before calling

// Optional: confirm latency monitoring is enabled server-side.
// CONFIG SET latency-monitor-threshold 100  (milliseconds)

Try / catch

lat, err := client.Latency(ctx).Result()
if err != nil {
    // observability-only; degrade gracefully
    lat = nil
}

Prevention

When it happens

Trigger: client.Latency(ctx) (LATENCY LATEST) against a server whose latency entry has fewer than 4 elements: a non-conformant fork, a proxy rewriting the reply, or a corrupted frame.

Common situations: Redis-compatible service with a different LATENCY shape; transport corruption; pointing through a RESP-rewriting proxy.

Related errors


AI-assisted analysis of go-redis/redis@36d97525cd (2026-08-06). Data as JSON: /data/errors/76fb183b8c9b96f0.json. Report an issue: GitHub.