Appearance
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:
| Endpoint | Funktion | Cache |
|---|---|---|
/articles | Returnerer alle artikler | Cached i Redis |
/articles/{id} | Returnerer en specifik artikel med kommentarer | Cached i Redis |
/users/:id | Returnerer brugerinformation | Cached i Redis |
/reset | Resetter cache og tællere | Sletter 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
}