From 91c594bef08aa5e71e292188b7ed6b60fbb7254a Mon Sep 17 00:00:00 2001 From: jimcockburn Date: Fri, 7 Mar 2025 16:19:02 +0000 Subject: [PATCH] expoential with backoff --- redis/backoff.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/redis/backoff.py b/redis/backoff.py index f612d60704..b42a92d9f2 100644 --- a/redis/backoff.py +++ b/redis/backoff.py @@ -109,6 +109,20 @@ def compute(self, failures: int) -> float: self._previous_backoff = min(self._cap, temp) return self._previous_backoff +class ExponentialWithJitterBackoff(AbstractBackoff): + """Exponential backoff upon failure, with jitter""" + + def __init__(self, cap: float = DEFAULT_CAP, base: float = DEFAULT_BASE) -> None: + """ + `cap`: maximum backoff time in seconds + `base`: base backoff time in seconds + """ + self._cap = cap + self._base = base + + def compute(self, failures: int) -> float: + return min(self._cap, random.random() * self._base * 2**failures) + def default_backoff(): return EqualJitterBackoff()