From dae248590ba1ca12d5f6c9931c5e93d628587b6f Mon Sep 17 00:00:00 2001 From: Victor_Jay Date: Sun, 31 May 2026 11:51:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=81=A2=E5=A4=8D=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=85=88=E5=88=87=20Redis=20=E5=86=8D?= =?UTF-8?q?=E8=BF=81=E5=AD=98=E9=87=8F=EF=BC=8C=E6=B6=88=E9=99=A4=20Snapsh?= =?UTF-8?q?ot=20=E9=81=97=E6=BC=8F=20gap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 先 healthy.Store(true) 再 migrateSessions() - 先切后迁:新会话立即走 Redis,存量通过 Pipeline 补写 - 迁移失败保持 healthy=true,由下个健康检测周期处理 --- internal/session/fallback_store.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/session/fallback_store.go b/internal/session/fallback_store.go index 1614492..a7874df 100644 --- a/internal/session/fallback_store.go +++ b/internal/session/fallback_store.go @@ -51,9 +51,10 @@ func (fs *FallbackStore) healthLoop(interval time.Duration) { ok := fs.ping() if ok && !prev { - // Redis 恢复:先迁移内存会话,再切回 Redis - fs.migrateSessions() + // Redis 恢复:先切到 Redis(新会话立即走 Redis),再迁移内存存量 + // 先切后迁:Snapshot 和 healthy 切换之间零 gap,不存在遗漏 fs.healthy.Store(true) + fs.migrateSessions() fs.degraded.Store(false) } else if !ok && prev { // Redis 掉线,标记降级