Files
mce/internal/session/store.go
Victor_Jay 5a8b0ca79c feat: 实现 FallbackStore 会话存储降级保护
- 新增 session/fallback_store.go,包装 RedisStore + MemoryStore 双后端
- 后台 goroutine 周期性 ping Redis,自动降级/恢复
- Store 接口新增 Metrics() 方法,MemoryStore/RedisStore/FallbackStore 均已实现
- deps_core.go 改造为始终创建 MemoryStore 兜底,Redis 启用时包装为 FallbackStore
- Manager 新增 GetStoreMetrics() 暴露存储状态
2026-05-31 11:38:20 +08:00

38 lines
1.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package session
// StoreMetrics 存储状态信息(供管理面板展示)
type StoreMetrics struct {
Type string // "redis" 或 "memory"
Healthy bool // Redis 健康状态memory 模式始终为 true
Degraded bool // 是否处于降级模式
DegradedNote string // 降级提示语(可选)
ActiveCount int // 活跃会话数,-1 表示不统计
}
// Store 会话存储接口(内存实现 / Redis 实现 / FallbackStore 均实现此接口)
type Store interface {
// Get 按会话 ID 获取会话,不存在或已过期返回 nil
Get(id string) (*Session, error)
// Set 写入/更新会话
Set(s *Session) error
// Delete 删除单个会话
Delete(id string) error
// DeleteByUID 删除某用户的所有会话(改密/注销/强制下线时调用)
DeleteByUID(uid uint) error
// DeleteByUIDExclude 删除某用户的所有会话,但保留指定的会话 ID
DeleteByUIDExclude(uid uint, excludeSID string) error
// ListByUID 列出某用户的所有活跃会话
ListByUID(uid uint) ([]*Session, error)
// Cleanup 清理过期会话,返回清理数量(由后台 goroutine 定期调用)
Cleanup() int
// Metrics 返回存储状态信息(供管理面板展示)
Metrics() StoreMetrics
}