summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/go-redis/redis/internal/internal.go
blob: fb4efa5f04782753b2e90549a4fc4765bdb6248d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package internal

import (
	"math/rand"
	"time"
)

const retryBackoff = 8 * time.Millisecond

// Retry backoff with jitter sleep to prevent overloaded conditions during intervals
// https://www.awsarchitectureblog.com/2015/03/backoff.html
func RetryBackoff(retry int, maxRetryBackoff time.Duration) time.Duration {
	if retry < 0 {
		retry = 0
	}

	backoff := retryBackoff << uint(retry)
	if backoff > maxRetryBackoff {
		backoff = maxRetryBackoff
	}

	return time.Duration(rand.Int63n(int64(backoff)))
}