必须先启动 Redis 服务再运行 Go 程序;macOS 用 brew install redis + redis-server,Ubuntu 用 apt 安装并 systemctl 启动,Windows 推荐 WSL2;Go 客户端首选 github.com/redis/go-redis/v9,Addr 为必填项,需调用 Ping 验证连通性。
必须先让 Redis 服务跑起来,再让 Go 连上它;缺一不可,且顺序不能颠倒。
本地开发最省事的方式是直接用包管理器安装并启动服务,不建议手动下载 ZIP 或编译源码——容易版本错配、权限异常、端口冲突。
brew install redis,然后 redis-server 启动(默认监听 localhost:6379)
sudo apt update && sudo apt install redis-server,再用 sudo systemctl start redis-server
redis-cli ping 应返回 PONG;若报 Could not connect to Redis at 127.0.0.1:6379,说明服务没起来或 bind 配置不对目前主流且维护活跃的是 github.com/redis/go-redis/v9(官方背书),不是旧版 go-redis/redis/v8 或更老的 gopkg.in/redis.v4。v9 是 2025 年后新项目首选,API 更一致、context 支持更彻底、错误类型更明确。
go get github.com/redis/go-redis/v9
import "github.com/redis/go-redis/v9"(注意路径里是 redis/go-redis,不是 go-redis/redis)v9 不兼容 v8 的 redis.Nil 判断方式——v9 用 redis.Error 类型做断言,不是字符串比对ctx 传参、Result() 调用、以及 Err() 是否被正确链式调用redis.NewClient 的 *redis.Options 结构体里,只有 Addr 是硬性必需项;其他如 Password、DB、Username(Redis 6+ ACL)、TLSConfig 全部按需填写,留空即走默认值。
Addr:格式为 "host:port",例如 "localhost:6379" 或 "10.0.1.5:6380";不要加 redis:// 前缀(那是 URL 解析逻辑,v9 不认)Password:仅当 Redis 配置了 requirepass 或启用 ACL 时才填;填错会报 AUTH failed 错误DB:默认是 0,但生产环境建议显式指定,避免切换数据库时误操作其他业务库Username:Redis 6+ 支持多用户,ACL 用户需同时设 Username 和 Password,否则认证失败DialTimeout、ReadTimeout、WriteTimeout,防止网络卡死阻塞整个 goroutine别跳过 rdb.Ping(ctx).Result(),这是唯一能确认“网络通、认证过、服务活”的三合一检测点。只测 net.Dial 没用,因为 Redis 协议握手和 AUTH 阶段可能失败。
dial tcp [::1]:6379: connect: connection refused → Redis 没启动,或 bind 配置为 127.0.0.1 但客户端连的是 ::1(IPv6);解决:改 redis.conf 中 bind 127.0.0.1 ::1 或统一用 IPv4redis: nil 或 NOAUTH Authentication required → 密码没填或填错;注意 v9 的 Password 字段不能为 nil,空密码也要写 ""
context deadline exceeded → 网络延迟高或超时设太短;建议初调设 5 * time.Second
rdb.Set(ctx, "test", "ok", 10*time.Second).Err() 和 rdb.Get(ctx, "test").Result() 验证读写通路配置本身很简单,难的是环境隔离和错误归因——本地跑通不等于线上可用,Docker 容器网络、K8s Service DNS、云 Redis 的白名单和加密开关,每个环节都可能悄无声息地切断连接。