|
8 | 8 | "NodePassDash/internal/endpointcache" |
9 | 9 | "NodePassDash/internal/nodepass" |
10 | 10 | "NodePassDash/internal/router" |
| 11 | + "NodePassDash/internal/servicecache" |
11 | 12 |
|
12 | 13 | // "NodePassDash/internal/lifecycle" |
13 | 14 | log "NodePassDash/internal/log" |
@@ -217,6 +218,13 @@ func initializeServices(sseDebugLog bool) (*gorm.DB, *auth.Service, *endpoint.Se |
217 | 218 | } |
218 | 219 | log.Infof("✅ Endpoint内存缓存初始化成功,已加载 %d 个端点", endpointcache.Shared.Count()) |
219 | 220 |
|
| 221 | + // 初始化Service内存缓存 |
| 222 | + if err := servicecache.InitShared(gormDB); err != nil { |
| 223 | + log.Errorf("初始化Service内存缓存失败: %v", err) |
| 224 | + return nil, nil, nil, nil, nil, nil, nil, nil, fmt.Errorf("初始化Service缓存失败: %v", err) |
| 225 | + } |
| 226 | + log.Infof("✅ Service内存缓存初始化成功,已加载 %d 个服务", servicecache.Shared.Count()) |
| 227 | + |
220 | 228 | // 初始化其他服务 |
221 | 229 | endpointService := endpoint.NewService(gormDB) |
222 | 230 | tunnelService := tunnel.NewService(gormDB) |
@@ -301,9 +309,27 @@ func startBackgroundServices(gormDB *gorm.DB, sseService *sse.Service, sseManage |
301 | 309 | }() |
302 | 310 | log.Info("Endpoint缓存定时持久化任务已启动(间隔: 30秒)") |
303 | 311 |
|
| 312 | + // 启动Service缓存定时持久化任务(每30秒持久化一次变更) |
| 313 | + go func() { |
| 314 | + ticker := time.NewTicker(30 * time.Second) |
| 315 | + defer ticker.Stop() |
| 316 | + |
| 317 | + for range ticker.C { |
| 318 | + if err := servicecache.Shared.PersistIfNeeded(gormDB); err != nil { |
| 319 | + log.Errorf("❌ 持久化Service缓存失败: %v", err) |
| 320 | + } else { |
| 321 | + stats := servicecache.Shared.GetStats() |
| 322 | + dirtyCount := stats["dirty_count"].(int) |
| 323 | + if dirtyCount > 0 { |
| 324 | + log.Debugf("💾 持久化了 %d 个变更的服务", dirtyCount) |
| 325 | + } |
| 326 | + } |
| 327 | + } |
| 328 | + }() |
| 329 | + log.Info("Service缓存定时持久化任务已启动(间隔: 30秒)") |
| 330 | + |
304 | 331 | // 启动SSE相关服务 |
305 | 332 | go func() { |
306 | | - sseService.StartStoreWorkers(4) // 减少worker数量 |
307 | 333 | sseManager.StartDaemon() |
308 | 334 |
|
309 | 335 | // 初始化SSE系统 |
@@ -340,6 +366,14 @@ func gracefulShutdown(server *http.Server, gormDB *gorm.DB, trafficScheduler *da |
340 | 366 | log.Infof("✅ Endpoint缓存已成功关闭并持久化") |
341 | 367 | } |
342 | 368 |
|
| 369 | + // 2. 持久化Service缓存(保证数据不丢失) |
| 370 | + log.Infof("💾 正在持久化Service缓存...") |
| 371 | + if err := servicecache.Shared.Shutdown(gormDB); err != nil { |
| 372 | + log.Errorf("❌ 关闭Service缓存失败: %v", err) |
| 373 | + } else { |
| 374 | + log.Infof("✅ Service缓存已成功关闭并持久化") |
| 375 | + } |
| 376 | + |
343 | 377 | // 关闭增强系统(暂时注释掉) |
344 | 378 | // if err := lifecycleManager.Shutdown(); err != nil { |
345 | 379 | // log.Errorf("增强系统关闭失败: %v", err) |
|
0 commit comments