mirror of
				https://github.com/redis/go-redis.git
				synced 2025-11-04 02:33:24 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			30 lines
		
	
	
		
			452 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			452 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package internal
 | 
						|
 | 
						|
import (
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/redis/go-redis/v9/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
 | 
						|
}
 |