| package internal | |
| import ( | |
| "time" | |
| "github.com/go-redis/redis/v8/internal/rand" | |
| ) | |
| func RetryBackoff(retry int, minBackoff, maxBackoff time.Duration) time.Duration { | |
| if retry < 0 { | |
| panic("not reached") | |
| } | |
| if minBackoff == 0 { | |
| return 0 | |
| } | |
| d := minBackoff << uint(retry) | |
| if d < minBackoff { | |
| return maxBackoff | |
| } | |
| d = minBackoff + time.Duration(rand.Int63n(int64(d))) | |
| if d > maxBackoff || d < minBackoff { | |
| d = maxBackoff | |
| } | |
| return d | |
| } |