Qu'est-ce que le cache ?
Le cache est un mécanisme de stockage temporaire qui conserve des copies de données fréquemment accédées dans un emplacement plus rapide que la source originale. Le principe fondamental est simple : accéder à une donnée déjà recuperee est toujours plus rapide que la récupérer à nouveau. Le cache est présent à 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 complètement les requêtes réseau.
Cache CDN
Les serveurs edge du CDN cachent le contenu statique au plus près des utilisateurs. Les en-tetes HTTP (Cache-Control, Vary, Surrogate-Control) controlent le comportement du cache. Les stratégies 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 résultats de requêtes coûteuses en base de données, de calculs complexes, ou de réponses d'API externes. Les stratégies incluent le cache-aside (l'application gere le cache), le read-through (le cache charge automatiquement), le write-through (écriture synchrone cache + source), et le write-behind (écriture asynchrone). Le TTL (Time To Live) définit la durée de validité.
Cache base de données
Les SGBD utilisent des caches internes : le query cache (cache des résultats de requêtes), le buffer pool (pages de données en mémoire), et les vues materialisees (résultats pre-calcules de requêtes complexes). Les index sont aussi une forme de cache structurelle qui accélère les recherches.
Invalidation et cohérence
L'invalidation du cache est considérée comme l'un des deux problèmes les plus difficiles en informatique. Les approches incluent le TTL (expiration temporelle), l'invalidation événementielle (supprimer le cache quand la source change), les clés 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 données et performance.