maintnotifications/README.md
Seamless Redis connection handoffs during cluster maintenance operations without dropping connections.
Cluster notifications are now supported for ClusterClient!
["SMIGRATING", SeqID, slot/range, ...] - Relaxes timeouts when slots are being migrated["SMIGRATED", SeqID, src host:port, dst host:port, slot/range, ...] - Reloads cluster state when slot migration completesNote: Other maintenance notifications (MOVING, MIGRATING, MIGRATED, FAILING_OVER, FAILED_OVER) are supported only in standalone Redis clients. Cluster clients support SMIGRATING and SMIGRATED for cluster-specific slot migration handling.
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Protocol: 3, // RESP3 required
MaintNotificationsConfig: &maintnotifications.Config{
Mode: maintnotifications.ModeEnabled,
},
})
ModeDisabled - Maintenance notifications disabledModeEnabled - Forcefully enabled (fails if server doesn't support)ModeAuto - Auto-detect server support (default)&maintnotifications.Config{
Mode: maintnotifications.ModeAuto,
EndpointType: maintnotifications.EndpointTypeAuto,
RelaxedTimeout: 10 * time.Second,
HandoffTimeout: 15 * time.Second,
MaxHandoffRetries: 3,
MaxWorkers: 0, // Auto-calculated
HandoffQueueSize: 0, // Auto-calculated
PostHandoffRelaxedDuration: 0, // 2 * RelaxedTimeout
}
EndpointTypeAuto - Auto-detect based on connection (default)EndpointTypeInternalIP - Internal IP addressEndpointTypeInternalFQDN - Internal FQDNEndpointTypeExternalIP - External IP addressEndpointTypeExternalFQDN - External FQDNEndpointTypeNone - No endpoint (reconnect with current config)Workers: min(PoolSize/2, max(10, PoolSize/3)) when auto-calculated
Queue: max(20×Workers, PoolSize) capped by MaxActiveConns+1 or 5×PoolSize
Examples: