feat: FallbackStore 恢复时静默迁移内存会话到 Redis
- MemoryStore 新增 Snapshot() 返回活跃会话副本 - Redis 恢复时自动将降级期间的内存会话 Pipeline 写入 Redis - 迁移成功后再切换 healthy 标记,用户无需重新登录 - 迁移失败则保持内存模式,避免切到空的 Redis 再被迫降级
This commit is contained in:
@ -211,3 +211,23 @@ func (ms *MemoryStore) Metrics() StoreMetrics {
|
||||
ActiveCount: count,
|
||||
}
|
||||
}
|
||||
|
||||
// Snapshot 返回所有活跃会话的副本(用于 Redis 恢复时迁移)
|
||||
func (ms *MemoryStore) Snapshot() []*Session {
|
||||
ms.mu.RLock()
|
||||
defer ms.mu.RUnlock()
|
||||
|
||||
var active []*Session
|
||||
for _, s := range ms.sessions {
|
||||
timeout := ms.idleTimeout
|
||||
if s.RememberMe {
|
||||
timeout = ms.rememberTimeout
|
||||
}
|
||||
if !s.IsExpired(timeout) {
|
||||
// 返回副本,避免外部修改内部 map
|
||||
copyS := *s
|
||||
active = append(active, ©S)
|
||||
}
|
||||
}
|
||||
return active
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user