diff --git a/error.go b/error.go index 8013de44a..ecfc8ccfe 100644 --- a/error.go +++ b/error.go @@ -85,7 +85,7 @@ func shouldRetry(err error, retryTimeout bool) bool { if strings.HasPrefix(s, "LOADING ") { return true } - if strings.HasPrefix(s, "READONLY ") { + if isReadOnlyError(err) { return true } if strings.HasPrefix(s, "MASTERDOWN ") { @@ -169,7 +169,14 @@ func isLoadingError(err error) bool { } func isReadOnlyError(err error) bool { - return strings.HasPrefix(err.Error(), "READONLY ") + redisError := err.Error() + if strings.HasPrefix(redisError, "READONLY ") { + return true + } + + // For a Lua script that includes a write command, the error string + // contains "-READONLY" rather than beginning with "READONLY " + return strings.Contains(redisError, "-READONLY") } func isMovedSameConnAddr(err error, addr string) bool {