Redis 连接失败时重试

Retry on redis connection failure

想知道为什么 redigo 决定不导出 errorConn 类型,这将允许应用程序对连接失败进行特定的错误处理。实施后,应用程序必须将这些作为一般错误处理。

例如,我们的应用程序通常不关心单个 PUT 是否失败,但如果问题是 redis 连接失败或 redis 池耗尽,则继续下一个 PUT(特别是如果它需要打开一个新的连接)是个坏主意。我们应该停止并重试(使用指数退避),直到连接恢复。

Code redigo 示例 returns 如果连接池耗尽则出现一般性错误

你的代码行中link return 两个值各自的类型:(Conn, error).

if !p.Wait && p.MaxActive > 0 && p.active >= p.MaxActive {
    p.mu.Unlock()
    return errorConn{ErrPoolExhausted}, ErrPoolExhausted
}

类型 Conn 是具有 Err 方法的接口。

// Err returns a non-nil value when the connection is not usable.
Err() error

因此,要获取潜在错误,您可以:

  • 对第一个 return 值调用 Err 方法;或
  • 检查第二个 error return 值。

附带说明一下,比较错误的推荐方法是使用标准库 errors 包中的 errors.Is and/or errors.As