Skip to content

Større Øvelse: Byg en nyhedswebside med database og Redis-cache

Individuelt eller i grupper (maks 3)

Formål

Formålet med øvelsen er at få praktisk erfaring med caching-strategier og måling af performanceforbedringer ved brug af Redis. Du skal bygge en nyhedswebside, der henter data fra en database, men som anvender Redis til at cache forespørgsler, så antallet af databaseopslag reduceres.

Grundlæggende krav

Du arbejder på et simpelt nyhedssite, der viser:

  • Nyhedsartikler (titel, indhold, forfatter, dato)
  • Kommentarer til hver artikel
  • Brugerinformation (navn, email)

Websitet skal:

  • Hente artikler og kommentarer fra databasen (med afsender)
  • Cache data i Redis, så gentagne kald hentes hurtigere.
  • Kunne vise cache hits og cache misses.
  • Have en udløbstid (TTL) på cachede data (f.eks. 10 sekunder).

Funktionelle krav

1. Datamodel

Du får følgende database-model som DBML (se nedenfor). Du må vælge database frit (PostgreSQL, MySQL, SQLite osv.).

2. Endpoints / Funktionalitet

Du skal minimum implementere:

EndpointFunktionCache
/articlesReturnerer alle artiklerCached i Redis
/articles/{id}Returnerer en specifik artikel med kommentarerCached i Redis
/users/:idReturnerer brugerinformationCached i Redis
/resetResetter cache og tællereSletter alle keys i Redis

I bestemmer selv om I vil returnere JSON eller HTML.

3. Cache logik

  • Brug Redis som cache-lag.
  • Ved første kald skal data hentes fra databasen og gemmes i Redis.
  • Ved gentagne kald skal data hentes fra Redis (cache hit).
  • Når TTL udløber, skal data hentes igen fra databasen (cache miss).
  • Implementér en counter for cache hits og misses (kan gemmes i Redis som HINCRBY felter).

4. Performance måling

  • Mål og log tiden for databaseopslag vs. cache-opslag.
  • Vis antal cache hits og misses på en simpel måde (f.eks. i terminalen eller som en del af API-responsen).

5. Teknologier

  • Valgfrit backend-sprog (Node.js, Python, PHP, Go, Java, etc.)
  • Valgfri database
  • Redis (på Docker, lokalt eller i cloud)
  • Valgfri HTTP-server eller framework

6. Præsentation

  • Præsentation af løsningen med fokus på Redis
  • Præsentation er valgfri og næste gang, men vil man gennemgå løsningen på klassen er det muligt

Materiale

DBML

dbml
Table users {
  id int [pk, increment]
  name varchar(100)
  email varchar(255) [unique]
  created_at datetime
}

Table articles {
  id int [pk, increment]
  title varchar(255)
  content text
  author_id int [ref: > users.id]
  created_at datetime
}

Table comments {
  id int [pk, increment]
  article_id int [ref: > articles.id]
  user_id int [ref: > users.id]
  content text
  created_at datetime
}