mrkeyoor.com_
Wed 30 Sept 03:08 UTC
Dev Toolsevaluationupdated 30 Sept 2026

go-redis review

Go-Redis is the official Redis client library for Go. It gives applications typed commands, connection pooling, pipelines, Pub/Sub, Sentinel and Cluster support, authentication options, and OpenTelemetry hooks without making teams write the Redis wire protocol themselves.

Verdict

Our run built Go-Redis in 47 seconds, but 5 of 35 test results failed after a 380-second run, so the official client still needs validation against your Redis topology. It is the sensible default for most Go services that want typed coverage, pooling, Cluster, Sentinel, and current Redis 8 support. Pin the version and avoid experimental caching or automatic pipelining unless their restrictions fit your workload.

We ran it

Lab card: what happened when we ran go-redisScreenshot of go-redis (redis.io)
Install✓ · 8s12 packages
Build✓ · 47s
Tests✗ · 380s30 passed · 5 failed of 35 (go test)
Repo565 files~196,274 lines of source · 7 MB · 10 CI workflows

Answers from our run

Does go-redis build from source?

Dependencies installed in 8 seconds (12 packages), and the build succeeded in 47 seconds. We cloned commit d8ee0a5 into a clean Debian container with 3 CPUs and no project-specific setup.

Do go-redis's tests pass?

Not all of them: 30 of 35 passed and 5 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use go-redis?

Projects pinned below Go 1.24: the measured commit declares Go 1.24 as its minimum.

What are the alternatives to go-redis?

Rueidis, Redigo, Valkey Go. Our run built Go-Redis in 47 seconds, but 5 of 35 test results failed after a 380-second run, so the official client still needs validation against your Redis topology.

Setup3/58-second install and passing build, but 5 test results failed
Docs5/5Detailed setup, auth, protocol, pooling, and failure guidance
Community5/522,256 stars with September 2026 issue and PR activity
Maturity4/5Official v9 client, though our full test command did not pass

Who it’s for

Go teams that want the official client and broad coverage of Redis commands.
Services using standalone Redis, Sentinel, Cluster, Pub/Sub, scripts, or transactions.
Operators who need TLS, rotating credentials, connection-pool controls, and OpenTelemetry hooks.
Applications prepared to pin v9 while experimental caching or automatic pipelining settles.

Who it’s NOT for

Projects pinned below Go 1.24: the measured commit declares Go 1.24 as its minimum.
Teams requiring a green fresh-container suite before adoption: our run reported 30 passing and 5 failing results out of 35.
Redis Stack 7.2 users expecting official coverage: the README targets recent Redis 8 releases and warns that some module tests may fail on Stack 7.2.
Developers who need stable client-side caching or automatic pipelining APIs today: the README labels both experimental and says they may change in a minor release.
Code that sends session-changing commands through Do: the documentation says pooled connections make that behavior nondeterministic.

Setup reality

Our fresh Debian sandbox installed commit d8ee0a5 in 8 seconds, adding 12 packages. The build succeeded in 47 seconds. Go test failed after 380 seconds: the supplied summary counted 30 passing and 5 failing results out of 35. The log tail lists successful internal packages and ends with FAIL, without the error text for the 5 failures.

An application needs Go 1.24 or newer plus a reachable Redis server. Basic setup is an address and database number, with optional username, password, TLS, URL parsing, or one of several credential providers. Sentinel and Cluster clients need their matching server topology.

The 7 MB checkout held 565 files and about 196,274 lines of source. There is no Dockerfile, but the compose file creates standalone, cluster, Sentinel, TLS, and fault-injection services for the project tests. Running the documented make test therefore needs Docker and more infrastructure than importing the client into an application.

The official client covers the Redis paths most Go teams need

Go-Redis gives a Go service typed access to Redis commands, connection pooling, Pub/Sub, scripts, transactions, Sentinel, and Cluster. It also supports RESP2 and RESP3, several credential-provider styles, TLS, and OpenTelemetry instrumentation. That breadth is the practical reason to start here: a team can keep one client as its Redis use grows beyond simple GET and SET calls.

The quick start is short. Create a client with an address, password, and database number, pass a context to each command, and close the client at shutdown. URL parsing is available when configuration already arrives as a Redis URI. A missing key returns redis.Nil, letting application code distinguish an absent value from a transport or server error.

Go 1.24 and a live Redis service are the real minimum

The measured commit declares Go 1.24 in go.mod. The README says the supported server set is recent Redis 8 releases, while Redis 7.0 and newer may work without official support. It also warns that some module-related tests may not pass against Redis Stack 7.2. Check this boundary before upgrading an older service just to adopt the latest client.

Authentication ranges from fixed username and password fields to function-based, context-based, and streaming credential providers. The order matters because the streaming provider wins when several are configured. A basic standalone connection needs little setup. Cluster, Sentinel, TLS, rotating identities, and module commands each add server assumptions that a successful Go build cannot inspect.

What happened when we ran it

Our sandbox installed commit d8ee0a5 in 8 seconds, adding 12 packages. The build passed in 47 seconds. We ran it in an unprivileged Debian container with 3 CPUs, 8 GB of RAM, Go 1.24, and no secrets. The checkout itself occupied 7 MB across 565 files and contained about 196,274 lines of source.

The test command failed after 380 seconds. The supplied measurement counted 30 passing and 5 failing results out of 35. Its final lines show successful packages under internal hashing, scanning, telemetry, pooling, protocol, routing, logging, maintenance notifications, and push handling, followed by the overall FAIL. The tail does not include the error messages for the 5 failures, so attributing them to Docker, Redis versions, ports, or code would be guesswork.

This repository has a compose file, although it has no Dockerfile. The documented make test starts Redis services through Docker Compose before running Go tests. Profiles cover standalone Redis, clusters, Sentinel, TLS, and an end-to-end proxy setup. Our failed run proves only that commit d8ee0a5 did not finish green in the measured container; the supplied log does not identify which dependency or behavior broke.

Experimental speed features come with sharp limits

Client-side caching uses RESP3 invalidation messages to keep eligible reads in process. In the current documentation it works only with a standalone client on database 0, and dynamic credential providers disable it. Commands that alter connection identity or tracking state are rejected while the cache is active. Those limits protect cached data from crossing identities, but they rule out several otherwise valid Redis setups.

Automatic pipelining batches concurrent commands and can operate in blocking or asynchronous form. The README labels the API experimental, advises pinning Go-Redis, and says a single goroutine sees little benefit. Queued commands no longer honor their individual contexts, a retried batch can execute non-idempotent commands twice, and the first caller's configuration wins because callers share the client-level autopipeliner. Those are design constraints, not footnotes.

Version 9.22.0, released August 3, 2026, introduced both features alongside Redis 8.10 support. Its notes also changed several default timeouts and retry values and corrected the WaitAOF return type. Explicit configurations remain stable, but an upgrade from 9.21 deserves a review of defaults and any code that uses WaitAOF.

Typed methods are safer than raw session commands

The Do escape hatch sends a command on whichever pooled connection is free. That is fine for ordinary keyspace commands. It is unsafe for session-changing commands such as SELECT, CLIENT SETNAME, RESET, and tracking configuration because later work may use a different connection while the changed connection returns to the pool. The README recommends typed APIs or a dedicated Conn held for the whole session.

Go-Redis also provides typed checks for loading, read-only, cluster-down, retry, authentication, permission, and memory errors. Hooks can wrap errors as long as they preserve unwrapping and set the wrapped error back on the command. These details matter in production because retry policy should distinguish a moved cluster slot from bad credentials or an aborted transaction.

September activity supports adoption, while the failed run demands a gate

GitHub reported 22,256 stars, 31 open issues, and 58 open pull requests on September 30, 2026. The last push was September 29. Current work includes cluster timeout handling, automatic pipelining, client-side cache behavior, connection-pool fixes, and credential redaction. Combined with the August v9.22.0 release, that is clear maintenance activity rather than a dormant client.

Go-Redis remains the default I would test first for a Go service on Redis 8. The API covers the common deployment shapes, and its documentation names several failure-prone edges directly. Put the exact server version and topology into CI, though. Our 380-second run ended with 5 failing results, and a database client earns trust only when its own integration path passes in the environment you will operate.

Alternatives

ProjectWhat it isPick it when
RueidisA Redis Go client built around automatic pipelining and client-side caching.pick this instead when those two behaviors are central requirements rather than optional experimental paths.
RedigoA smaller, long-running Go client with a lower-level command interface.pick this instead when a compact API and manual control matter more than broad typed command coverage.
Valkey GoA Go client maintained for the Valkey ecosystem with Redis-compatible operation.pick this instead when Valkey is your primary server and project alignment matters.

What people are saying

  1. [velocity-scout] redis/go-redis

Sources

  1. Go-Redis repository and README
  2. Go-Redis v9.22.0 release notes
  3. Go-Redis module definition
  4. Go-Redis test and build Makefile
  5. Go-Redis Docker Compose test services

More dev tools reviews

retrofit · keploy · Kaku · kordoc · hey · wechat-miniapp-radar · the whole board →