← Retour aux articles
Performance et bases de données

Le caching, ce n'est pas seulement Redis et les requêtes de base de données. Une carte complète des performances.

Une carte complète des couches de caching dans les applications modernes : cache navigateur, cache de page complet, caching d'opcode, caching de fragment, Redis, cache de requêtes MySQL et tables agrégées.

Le caching, ce n'est pas seulement Redis et les requêtes de base de données. Une carte complète des performances.
Article en vedette ↗

Le caching, ce n'est pas seulement Redis et les requêtes de base de données. Une carte complète des performances.

Je suis tombé aujourd'hui sur une analyse approfondie des types de caching, et cela m'a inspiré pour structurer mes propres connaissances. On pense souvent que le caching se résume à Redis ou à un cache de requêtes de base de données. Mais en réalité, c'est tout un écosystème qui opère à chaque niveau d'une application !

Alors, qu'est-ce qu'un cache ? En termes simples, un cache est un tampon intermédiaire à accès rapide où les données sont stockées. Sa mission principale est de permettre de travailler avec de grands volumes de données dans les plus brefs délais, en utilisant des ressources limitées, qu'il s'agisse de la puissance du serveur ou de la bande passante de l'utilisateur.

Décomposons où vivent ces « accélérateurs ».

🖥️ 1. Caching côté client (cache du navigateur)

C'est ici que nous économisons du trafic et de la latence entre l'utilisateur et le serveur. Le navigateur est invité à utiliser une copie locale, et le serveur répond avec un statut 304 Not Modified.

  • Caching des fichiers et images : Parfait pour les sites riches en médias. Les en-têtes comme Expires et Cache-Control indiquent au navigateur de stocker les ressources pendant des semaines. Le hic : si un fichier change, l'utilisateur pourrait ne pas voir la mise à jour immédiatement.
  • Caching HTTPS : Les en-têtes de sécurité (par exemple, Strict-Transport-Security) forcent le navigateur à toujours utiliser HTTPS pour votre domaine.
  • Caching de l'autorité de certification (CA) : Stocke le « sceau » de confiance de votre certificat SSL, afin que le navigateur n'ait pas à le valider auprès de la CA à chaque visite.
  • Caching de page : Le type le plus intelligent. À l'aide d'en-têtes comme ETag et Last-Modified, le serveur vérifie si une page a changé depuis la dernière visite de l'utilisateur. Sinon, il envoie un 304, et le navigateur charge la copie locale.

En résumé : Le caching du navigateur économise du trafic et accélère les visites de retour, mais pour l'amorcer, un utilisateur doit d'abord visiter le site. Donc, bien qu'il aide, il ne réduit pas radicalement la charge initiale du serveur.

🚀 2. Caching côté serveur

Ici, les données sont stockées sur le serveur et fonctionnent selon un principe « un-à-plusieurs ». C'est notre artillerie principale dans la bataille pour la performance.

  • 2.1. Caching de page complet : La méthode la plus efficace. Une page HTML entièrement rendue est servie instantanément depuis la mémoire, permettant même à un serveur modeste de gérer des millions de requêtes. Idéal pour les utilisateurs invités où le contenu n'est pas personnalisé. L'inconvénient : ne convient pas aux pages spécifiques à l'utilisateur. Souvent utilisé avec un TTL (par exemple, à partir de 2 minutes).
  • 2.2. Caching d'opcode PHP : (OPcache, APC). Cela met en cache le bytecode compilé du script, afin qu'il n'ait pas besoin d'être recompilé à chaque requête. Réduit crucialement la charge CPU.
  • 2.3. Caching partiel (fragment) : L'outil le plus complexe mais le plus puissant. Il permet de mettre en cache des parties dynamiques d'une page (par exemple, une barre latérale, une liste de produits) avec des dépendances sur les tables de base de données, les sessions utilisateur ou les paramètres GET. Le principal avantage : réduire drastiquement les requêtes de base de données pour les utilisateurs authentifiés. Mettre à l'échelle un pool de serveurs d'application est plus facile que de mettre à l'échelle un cluster de base de données.
  • 2.4 / 2.5. Caching de données en mémoire (Redis, Memcached) : C'est ici que vivent les données sérialisées : résultats de calculs lourds, fichiers de configuration, état du système. C'est notre outil principal pour mettre en cache les données de l'application, pas seulement le HTML rendu.
  • 2.6. Cache de requêtes MySQL : Un classique, mais avec des réserves. Les requêtes utilisant des fonctions comme UNIX_TIMESTAMP() invalident constamment le cache. La solution consiste à utiliser des conditions qui changent moins fréquemment pour permettre aux requêtes adjacentes d'être mises en cache.
  • 2.7. Caching via vues agrégées/matérialisées : La règle d'or : « Les lectures doivent largement dépasser les écritures. » Si les données changent rarement mais sont lues souvent, pré-calculez-les et stockez-les dans une table de synthèse.

🗺️ Résumé : Tout est une question de stratégie

Un caching efficace n'est pas une seule balle d'argent ; c'est une défense multicouche. Une stratégie bien construite ressemble à un ensemble de poupées russes : CDN -> Serveur Web (cache de page complet) -> Backend (cache de fragment) -> Cache en mémoire (Redis) -> Cache de base de données -> Tables agrégées.

Comprendre quel outil utiliser à quel niveau est le véritable art de construire des systèmes rapides et réactifs.

Technologies et sujets

Tags de l'article

Aucun article ne correspond à ces filtres.

Vous avez un projet ou une idée à discuter ?

Parlons-en ↗