fix(redis): add opt-in health_check_interval for stale pooled connections (#23573)
Introduces REDIS_HEALTH_CHECK_INTERVAL and wires it through to every Redis client created by get_redis_connection (plain, cluster and sentinel paths, sync and async). When set, redis-py will PING any connection idle longer than the interval on checkout, so dead sockets are surfaced as reconnectable errors before a real command lands on them. Defaults to unset (empty string) so existing deployments see no behavioural change. Operators who want the protection should set it shorter than the Redis server `timeout` setting and any firewall/LB idle timeout on the path to Redis. Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -435,6 +435,20 @@ REDIS_SOCKET_KEEPALIVE = (
|
||||
os.environ.get('REDIS_SOCKET_KEEPALIVE', 'False').lower() == 'true'
|
||||
)
|
||||
|
||||
# How often (in seconds) redis-py should PING an idle pooled connection
|
||||
# before reusing it. Opt-in: defaults to unset (empty string) so behavior
|
||||
# is unchanged for existing deployments. When set, should be shorter than
|
||||
# the Redis server `timeout` setting and any firewall/LB idle timeout on
|
||||
# the path to Redis, so stale connections are detected before a real
|
||||
# command lands on them. Set to 0 or empty to disable.
|
||||
REDIS_HEALTH_CHECK_INTERVAL = os.environ.get('REDIS_HEALTH_CHECK_INTERVAL', '')
|
||||
try:
|
||||
REDIS_HEALTH_CHECK_INTERVAL = int(REDIS_HEALTH_CHECK_INTERVAL)
|
||||
if REDIS_HEALTH_CHECK_INTERVAL <= 0:
|
||||
REDIS_HEALTH_CHECK_INTERVAL = None
|
||||
except ValueError:
|
||||
REDIS_HEALTH_CHECK_INTERVAL = None
|
||||
|
||||
REDIS_RECONNECT_DELAY = os.environ.get('REDIS_RECONNECT_DELAY', '')
|
||||
|
||||
if REDIS_RECONNECT_DELAY == '':
|
||||
|
||||
Reference in New Issue
Block a user