You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用go-redis连接本地Redis失败,报context deadline exceeded错误

解决Go项目连接Docker Redis出现"context deadline exceeded"的问题
  • 核心问题:错误启用了TLS连接
    默认的redis:6.2.3-alpine镜像没有配置TLS加密,你的Go代码里强制添加了TLSConfig,导致客户端尝试用TLS协议去连普通的Redis端口,最终超时失败。直接移除TLS相关配置就能解决这个问题。

  • 修复后的Go连接代码
    调整代码,去掉TLS配置,同时把OnConnect回调移到创建client之前设置(否则回调不会生效):

    func connect() *RedisConnection {
        ctx := context.Background() // 确保使用有效的上下文
        opts := &redis.Options{
            Addr:     "localhost:6379",
            Password: "",
            DB:       0,
            // 提前设置OnConnect回调
            OnConnect: func(ctx context.Context, cn *redis.Conn) error {
                log.Info().Msgf("connected to redis..")
                return nil
            },
        }
    
        client := redis.NewClient(opts)
        if err := client.Ping(ctx).Err(); err != nil {
            log.Info().Msgf(err.Error())
            // 可根据需求添加错误处理逻辑,比如返回nil或panic
        }
    
        return &RedisConnection{
            redisClient: client,
        }
    }
    
  • 额外排查步骤

    • 检查Redis容器状态:执行docker ps,确认redis容器处于Up状态
    • 手动验证Redis连通性:用redis-cli ping测试,正常会返回PONG,说明本地6379端口可访问
    • 排查防火墙:确认本地防火墙或安全软件没有拦截6379端口的入站/出站请求

内容的提问来源于stack exchange,提问作者nespondev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 12:42:33