refactor(go): simplify redis realtime projections

This commit is contained in:
lingniu
2026-07-03 13:42:15 +08:00
parent a96490618c
commit c359930009
5 changed files with 207 additions and 70 deletions

View File

@@ -58,7 +58,7 @@ func main() {
mux.Handle("/swagger-ui/", realtime.NewSwaggerUIHandler())
mux.Handle("/api/realtime/vehicles/", realtime.NewHandler(repository))
closeStats := func() {}
var updater realtimeUpdater = repository
var updater realtimeUpdater = fastRealtimeUpdater{repository: repository}
if dsn := strings.TrimSpace(os.Getenv("MYSQL_DSN")); dsn != "" {
db, err := sql.Open("mysql", dsn)
if err != nil {
@@ -93,7 +93,7 @@ func main() {
envInt("MYSQL_REALTIME_ASYNC_WORKERS", 4),
)
}
updater = compositeRealtimeUpdater{primary: repository, secondary: mysqlUpdater}
updater = compositeRealtimeUpdater{primary: fastRealtimeUpdater{repository: repository}, secondary: mysqlUpdater}
logger.Info("realtime mysql snapshot enabled", "table", "vehicle_realtime_snapshot", "plate_binding_table", bindingTable, "plate_cache_ttl_seconds", envInt("PLATE_CACHE_TTL_SECONDS", 600))
}
mux.Handle("/api/stats/daily-metrics", stats.NewMetricHandler(stats.NewMetricRepository(db)))
@@ -216,6 +216,14 @@ type realtimeUpdater interface {
Update(context.Context, envelope.FrameEnvelope) error
}
type fastRealtimeUpdater struct {
repository *realtime.Repository
}
func (u fastRealtimeUpdater) Update(ctx context.Context, env envelope.FrameEnvelope) error {
return u.repository.FastUpdate(ctx, env)
}
type compositeRealtimeUpdater struct {
primary realtimeUpdater
secondary realtimeUpdater