Introduction : Pourquoi mettre en cache en PHP ?
Toute application web moderne en PHP est confrontée à un problème de performance. Chaque requête à la base de données, lecture de fichiers de configuration ou rendu d'un modèle HTML complexe prend du temps et des ressources serveur. La mise en cache est une technique qui permet de stocker les résultats d'opérations coûteuses dans un stockage rapide, afin de fournir instantanément des données prêtes à l'emploi lors d'une requête ultérieure.
En PHP, il existe plusieurs niveaux de mise en cache : de la mise en cache intégrée du bytecode (OPcache) aux systèmes distribués comme Redis et Memcached. Dans cet article, nous verrons comment et quand appliquer chacun de ces outils pour que votre site fonctionne plus rapidement, supporte plus de charge et économise des ressources.
Solutions intégrées : OPcache et APCu
Avant de connecter des services externes, il convient de prêter attention à ce que PHP propose « prêt à l'emploi ». Deux mécanismes clés — OPcache et APCu — peuvent apporter un gain de performance significatif sans installation de logiciel supplémentaire.
OPcache : Mise en cache du bytecode
Chaque fois que PHP exécute un script, il le compile en bytecode (opcode). OPcache stocke ce bytecode en mémoire partagée, ce qui permet d'ignorer l'étape de compilation lors des requêtes suivantes. C'est particulièrement efficace pour les frameworks (Laravel, Symfony) et les CMS (WordPress, Drupal), où des dizaines de fichiers sont chargés à chaque requête.
Configuration dans php.ini :
opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=4000opcache.revalidate_freq=60Il est recommandé d'activer OPcache sur tous les serveurs de production. C'est sans doute le moyen le plus simple d'accélérer une application PHP de 20 à 40 %.
APCu : Mise en cache des données utilisateur
APCu (Alternative PHP Cache) fournit une interface simple pour stocker des données arbitraires en mémoire partagée. Contrairement à OPcache qui met en cache le code, APCu stocke les résultats de calculs : données de la base de données, objets sérialisés, fragments HTML.
Exemple de mise en cache du résultat d'une requête SQL :
// Stocke les données pendant 300 secondes$key = 'users_list';$data = apcu_fetch($key, $success);
if (!$success) { $data = $db->query("SELECT * FROM users")->fetchAll(); apcu_store($key, $data, 300);}
return $data;APCu est idéal pour les applications monopages ou les projets avec un seul serveur. Cependant, ses données sont stockées localement, et si vous utilisez plusieurs serveurs (mise à l'échelle horizontale), vous aurez besoin d'une solution distribuée.
Memcached : Mise en cache distribuée simple et rapide
Memcached est un système de mise en cache haute performance fonctionnant en mémoire vive. Il a été créé pour accélérer les applications web dynamiques en réduisant la charge sur les bases de données. Ses principaux avantages sont la simplicité, la vitesse et le support du stockage distribué.
Installation de l'extension PHP :
pecl install memcachedExemple de connexion et d'utilisation :
$memcached = new Memcached();$memcached->addServer('localhost', 11211);
$key = 'article_123';$cached = $memcached->get($key);
if ($cached === false) { $article = getArticleFromDB(123); $memcached->set($key, $article, 3600); // cache pour 1 heure} else { $article = $cached;}Memcached ne prend pas en charge les structures de données complexes (uniquement les chaînes et les objets binaires), mais il excelle dans la tâche du cache « classique » : stockez les données par clé, récupérez-les par clé. Il est important de se rappeler que Memcached n'a pas de persistance intégrée — toutes les données sont perdues lors du redémarrage du serveur.
Redis : Un outil puissant et flexible pour la mise en cache
Redis n'est pas seulement un cache, mais un véritable magasin de données en mémoire avec prise en charge de la persistance, des transactions et des structures complexes (listes, ensembles, hachages, files d'attente). Pour le développeur PHP, Red