Qu'est-ce que le cache ?
Le cache est un mecanisme de stockage temporaire qui conserve des copies de donnees frequemment accedees dans un emplacement plus rapide que la source originale. Le principe fondamental est simple : acceder a une donnee deja recuperee est toujours plus rapide que la recuperer a nouveau. Le cache est present a tous les niveaux de l'informatique, du processeur au navigateur web.
Les niveaux de cache
Cache navigateur
Le navigateur met en cache les ressources HTTP (images, CSS, JavaScript) selon les en-tetes Cache-Control, ETag et Expires. Les Service Workers offrent un cache programmatique pour les applications offline-first. Le cache navigateur est le plus proche de l'utilisateur et elimine completement les requetes reseau.
Cache CDN
Les serveurs edge du CDN cachent le contenu statique au plus pres des utilisateurs. Les en-tetes HTTP (Cache-Control, Vary, Surrogate-Control) controlent le comportement du cache. Les strategies d'invalidation (purge par URL, par tag, ou par prefixe) permettent de rafraichir le contenu quand la source change.
Cache applicatif
Le cache applicatif (Redis, Memcached) stocke les resultats de requetes couteuses en base de donnees, de calculs complexes, ou de reponses d'API externes. Les strategies incluent le cache-aside (l'application gere le cache), le read-through (le cache charge automatiquement), le write-through (ecriture synchrone cache + source), et le write-behind (ecriture asynchrone). Le TTL (Time To Live) definit la duree de validite.
Cache base de donnees
Les SGBD utilisent des caches internes : le query cache (cache des resultats de requetes), le buffer pool (pages de donnees en memoire), et les vues materialisees (resultats pre-calcules de requetes complexes). Les index sont aussi une forme de cache structurelle qui accelere les recherches.
Invalidation et coherence
L'invalidation du cache est consideree comme l'un des deux problemes les plus difficiles en informatique. Les approches incluent le TTL (expiration temporelle), l'invalidation evenementielle (supprimer le cache quand la source change), les cles versionnees (inclure un hash ou version dans la cle), et le stale-while-revalidate (servir le cache expire tout en rafraichissant en arriere-plan). Chaque approche fait un compromis entre fraicheur des donnees et performance.