Cache-Warming beim Systemstart #21

Open
opened 2026-06-21 23:03:02 +02:00 by Radixura · 0 comments
Owner

Ziel

Beim Start der Anwendung werden ALLE existierenden Feeds sofort generiert und im Cache abgelegt, sodass der erste Request auf jeden Feed bereits ein Cache-Hit ist.

Beschreibung

Cache-Warming verhindert den "Cold Start"-Effekt: Der erste Abruf eines Feeds wäre sonst langsam (DB-Query + XML-Generierung). Beim Booten werden alle Feeds aus der DB gelesen, ihre letzten max_posts Posts abgerufen, das XML generiert und in die DashMap gepusht.

Akzeptanzkriterien

  • Funktion pub async fn warm_cache(pool: &SqlitePool, cache: &FeedCache, base_url: &str) -> Result<CacheStats, AppError>
  • Wird in main.rs NACH Pool-Erstellung, Migrationen und State-Aufbau aufgerufen (vor Server-Start)
  • Iteriert über alle Feeds in der DB
  • Für jeden Feed:
    1. Holt die max_posts neuesten Posts
    2. Generiert RSS-XML (generate_rss())
    3. Generiert Atom-XML (generate_atom())
    4. Speichert beides im Cache
  • Gibt CacheStats zurück (wie viele Feeds gewärmt)
  • Fehler bei Einzelfeeds werden geloggt aber führen NICHT zum Abbruch — der Server startet trotzdem
  • Log-Ausgabe: [boot] Cache warmed: 12 feeds (12 rss, 12 atom)

Technische Hinweise

  • Die Reihenfolge in main.rs:
    1. init_pool()
    2. sqlx::migrate!().run().await
    3. FeedCache::default() erstellen
    4. warm_cache(&pool, &cache, &config.base_url).await
    5. Router bauen
    6. Server starten
  • Wenn es noch keine Feeds gibt: Cache bleibt leer, kein Fehler
  • tracing::info!() für Logs nutzen
## Ziel Beim Start der Anwendung werden ALLE existierenden Feeds sofort generiert und im Cache abgelegt, sodass der erste Request auf jeden Feed bereits ein Cache-Hit ist. ## Beschreibung Cache-Warming verhindert den "Cold Start"-Effekt: Der erste Abruf eines Feeds wäre sonst langsam (DB-Query + XML-Generierung). Beim Booten werden alle Feeds aus der DB gelesen, ihre letzten `max_posts` Posts abgerufen, das XML generiert und in die DashMap gepusht. ## Akzeptanzkriterien - [ ] Funktion `pub async fn warm_cache(pool: &SqlitePool, cache: &FeedCache, base_url: &str) -> Result<CacheStats, AppError>` - [ ] Wird in `main.rs` NACH Pool-Erstellung, Migrationen und State-Aufbau aufgerufen (vor Server-Start) - [ ] Iteriert über alle Feeds in der DB - [ ] Für jeden Feed: 1. Holt die `max_posts` neuesten Posts 2. Generiert RSS-XML (`generate_rss()`) 3. Generiert Atom-XML (`generate_atom()`) 4. Speichert beides im Cache - [ ] Gibt CacheStats zurück (wie viele Feeds gewärmt) - [ ] Fehler bei Einzelfeeds werden geloggt aber führen NICHT zum Abbruch — der Server startet trotzdem - [ ] Log-Ausgabe: `[boot] Cache warmed: 12 feeds (12 rss, 12 atom)` ## Technische Hinweise - Die Reihenfolge in `main.rs`: 1. `init_pool()` 2. `sqlx::migrate!().run().await` 3. `FeedCache::default()` erstellen 4. `warm_cache(&pool, &cache, &config.base_url).await` 5. Router bauen 6. Server starten - Wenn es noch keine Feeds gibt: Cache bleibt leer, kein Fehler - `tracing::info!()` für Logs nutzen
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Radixura/rss-atom-backend#21
No description provided.