mirror of
https://github.com/redis/go-redis.git
synced 2025-07-28 06:42:00 +03:00
feat: add proactive push notification processing to WithReader
- Add push notification processing to Conn.WithReader method - Process notifications immediately before every read operation - Provides proactive notification handling vs reactive processing - Add proper error handling with internal.Logger - Non-blocking implementation that doesn't break Redis operations - Complements existing processing in Pool.Put and isHealthyConn Benefits: - Immediate processing when notifications arrive - Called before every read operation for optimal timing - Prevents notification backlog accumulation - More responsive to Redis cluster changes - Better user experience during migrations - Optimal placement for catching asynchronous notifications Implementation: - Type-safe interface assertion for processor - Context-aware error handling with logging - Maintains backward compatibility - Consistent with existing pool patterns - Three-layer processing strategy: WithReader (proactive) + Pool.Put + isHealthyConn (reactive) Use cases: - MOVING/MIGRATING/MIGRATED notifications for slot migrations - FAILING_OVER/FAILED_OVER notifications for failover scenarios - Real-time cluster topology change awareness - Improved connection utilization efficiency
This commit is contained in:
@ -433,7 +433,7 @@ func NewFailoverClient(failoverOpt *FailoverOptions) *Client {
|
||||
|
||||
// Initialize push notification processor using shared helper
|
||||
// Use void processor by default for failover clients (typically don't need push notifications)
|
||||
rdb.pushProcessor = initializePushProcessor(opt, true)
|
||||
rdb.pushProcessor = initializePushProcessor(opt)
|
||||
|
||||
connPool = newConnPool(opt, rdb.dialHook)
|
||||
rdb.connPool = connPool
|
||||
@ -503,7 +503,7 @@ func NewSentinelClient(opt *Options) *SentinelClient {
|
||||
|
||||
// Initialize push notification processor using shared helper
|
||||
// Use void processor by default for sentinel clients (typically don't need push notifications)
|
||||
c.pushProcessor = initializePushProcessor(opt, true)
|
||||
c.pushProcessor = initializePushProcessor(opt)
|
||||
|
||||
c.initHooks(hooks{
|
||||
dial: c.baseClient.dial,
|
||||
|
Reference in New Issue
Block a user