fix: Redis 降级机制优化:启动离线不崩溃 + 操作级即时降级 + 快速恢复
- 启动时 Redis 不可达不再 Fatal 退出,降级为内存模式继续运行 - FallbackStore 改为操作级降级:Redis 操作失败立即切换到内存,不依赖周期健康检查 - 新增 recoveryLoop:降级后每 5s 轮询尝试恢复,恢复后自动迁移内存会话回 Redis - 健康检查与清理解耦:检查 30s 间隔,恢复轮询 5s 间隔(原 300s) - 优化 go-redis 连接池参数(DialTimeout 1s, MaxRetries 1,减少故障阻塞时间)
This commit is contained in:
@ -70,14 +70,16 @@ func main() {
|
||||
r.Static("/uploads/avatars", "./storage/uploads/avatars")
|
||||
r.Static("/uploads/posts", "./storage/uploads/posts")
|
||||
|
||||
// Redis 客户端(可选)
|
||||
// Redis 客户端(可选,不可达时自动降级为内存存储)
|
||||
var redisClient *redis.Client
|
||||
if cfg.Redis.Enabled {
|
||||
redisClient, err = common.NewRedisClient(cfg.Redis)
|
||||
if err != nil {
|
||||
log.Fatalf("Redis 连接失败: %v", err)
|
||||
log.Printf("Redis 不可用,降级为内存存储: %v", err)
|
||||
redisClient = nil // 强制走纯内存模式
|
||||
} else {
|
||||
log.Printf("Redis 已连接 %s:%s (DB=%d)", cfg.Redis.Host, cfg.Redis.Port, cfg.Redis.DB)
|
||||
}
|
||||
log.Printf("Redis 已连接 %s:%s (DB=%d)", cfg.Redis.Host, cfg.Redis.Port, cfg.Redis.DB)
|
||||
} else {
|
||||
log.Println("Redis 未启用,使用内存存储")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user