使用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端口的入站/出站请求
- 检查Redis容器状态:执行
内容的提问来源于stack exchange,提问作者nespondev
相关产品推荐
相关产品推荐

