golang如何使用go-redis客户端_golang go-redis客户端使用教程
初始化 RDB 客户端需正确设置 AddrDocker 中用 host.docker.internal 或宿主 IP、显式调用 Ping 校验连接、Password 和 UsernameACL不遗漏、使用带超时的 contextSet 过期时间必须为 time.Duration 类型哨兵模式须用 NewFailoverClient 并配对 MasterName 与 SentinelAddrs连接池参数需按压测调优并强制健康检查。怎么初始化 rdb 客户端才不会连不上本地开发连不上 Redis八成是 Addr 配错了或没启服务。默认地址 localhost:6379 看似简单但 Docker 里跑 Go 程序时localhost 指的是容器自己不是宿主机得换成 host.docker.internal:6379Mac/Win或宿主真实 IPLinux。另外redis.NewClient 不会立即建连只是配置好参数真正校验要靠 rdb.Ping(ctx).Result() —— 这一步必须做否则后续操作失败时错误堆栈里根本看不出是连接问题。Addr 必须带端口写成 127.0.0.1:6379 比 localhost:6379 更稳避免 DNS 解析干扰密码非空时Password 字段不能漏且不能多加空格Redis 6 ACL 用户需用 Username 字段显式指定别省略 ctx用 context.Background() 可以但生产环境建议传带超时的 context比如 context.WithTimeout(ctx, 5*time.Second)rdb.Set 和 rdb.Get 的过期时间参数到底填什么rdb.Set(ctx, key, value, expiration) 第四个参数是 time.Duration不是秒数也不是字符串。填 0 表示永不过期填 time.Minute 或 5 * time.Second 才生效填 60 是错的 —— 它会被当成纳秒实际过期时间几乎为零。常见误写rdb.Set(ctx, k, v, 3600) → 实际设了 3600 纳秒过期等同于立刻失效正确写法rdb.Set(ctx, k, v, 1*time.Hour) 或 rdb.Set(ctx, k, v, time.Duration(3600)*time.Second)rdb.Get 返回 redis.Nil 错误表示 key 不存在不是常规 error要用 if err redis.Nil 判断别直接 panic(err)为什么哨兵模式下换主后请求还发到旧地址用 NewClient(Options{Addr: 10.0.1.10:6379}) 直连某个 Redis 实例哪怕配了哨兵go-redis 也完全不知道哨兵存在 —— 它只会死磕这个地址。真要支持自动故障转移必须用 redis.NewFailoverClient且 MasterName 必须和哨兵配置中 sentinel monitor mymaster 的名字**完全一致大小写敏感**SentinelAddrs 填的是哨兵节点地址如 10.0.1.10:26379不是 Redis 实例地址。错误示范把 SentinelAddrs 写成 Redis 主节点地址或只填一个哨兵节点单点失效风险推荐写法SentinelAddrs: []string{10.0.1.10:26379, 10.0.1.11:26379, 10.0.1.12:26379}连接成功后可调 rdb.Info(ctx, replication).Result() 看当前角色验证是否真的连上了新主并发高时为啥总卡在 rdb.Get 上默认连接池大小是 CPU 核数 × 10看着大但若每个请求都新建 context 且不设超时或 Redis 响应慢连接池会迅速耗尽后续请求就在 PoolTimeout 里排队。这不是代码写错了是连接池参数没按压测结果调优。 Vozo Vozo是一款强大的AI视频编辑工具可以帮助用户轻松重写、配音和编辑视频。