Introduction : Pourquoi la mise en cache est le fondement des performances PHP
\n\nChaque développeur PHP rencontre tôt ou tard un problème de performance. Des pages qui se chargent lentement, une consommation mémoire élevée du serveur et des requêtes fréquentes à la base de données sont les symptômes d'une absence de mise en cache judicieuse. Dans le développement web moderne, la mise en cache n'est pas un luxe, mais une nécessité. Sans elle, même le code le plus optimisé ralentira sous une charge élevée.
\n\nDans cet article, nous allons analyser trois approches clés de la mise en cache en PHP : Redis, Memcached et les solutions intégrées (APCu, OPcache, mise en cache fichier). Vous apprendrez à choisir l'outil adapté à une tâche spécifique, verrez des exemples de code fonctionnels et obtiendrez des recommandations pratiques pour la mise en œuvre.
\n\n1. Solutions intégrées PHP : APCu, OPcache et mise en cache fichier
\n\n1.1. OPcache — mise en cache du bytecode
\n\nOPcache est un mécanisme intégré à PHP qui compile et stocke le bytecode compilé des scripts en mémoire. Au lieu d'analyser et de compiler le fichier PHP à chaque fois, OPcache utilise le résultat prêt. Cela permet un gain de vitesse allant jusqu'à 30-50 % sans une seule ligne de code.
\n\nConfiguration dans php.ini :
\nopcache.enable=1\nopcache.memory_consumption=128\nopcache.interned_strings_buffer=8\nopcache.max_accelerated_files=10000\nopcache.revalidate_freq=2\n\nPour vérifier le fonctionnement d'OPcache, utilisez la fonction :
\n<?php\nvar_dump(opcache_get_status());\n?>\n\n1.2. APCu — mise en cache des données en mémoire
\n\nAPCu (Alternative PHP Cache) est une extension pour stocker des données arbitraires en mémoire partagée. Idéal pour mettre en cache les résultats de calculs lourds, les configurations ou les données qui changent rarement.
\n\nExemple de mise en cache avec APCu :
\n<?php\n// Enregistrer les données dans le cache pendant 3600 secondes (1 heure)\n$data = ['users' => 1500, 'status' => 'active'];\napcu_store('app_stats', $data, 3600);\n\n// Lire depuis le cache\n$cached = apcu_fetch('app_stats');\nif ($cached === false) {\n // Les données ne sont pas dans le cache — on les recalcule\n $cached = computeExpensiveData();\n apcu_store('app_stats', $cached, 3600);\n}\n?>\n\n1.3. Mise en cache fichier — un démarrage simple sans extensions supplémentaires
\n\nSi vous ne pouvez pas installer Redis ou Memcached, utilisez le système de fichiers. C'est plus lent, mais cela fonctionne sur n'importe quel hébergement.
\n\n<?php\nclass FileCache {\n private $cacheDir;\n \n public function __construct($dir = '/tmp/php_cache/') {\n $this->cacheDir = $dir;\n if (!is_dir($dir)) {\n mkdir($dir, 0777, true);\n }\n }\n \n public function get($key, $ttl = 3600) {\n $file = $this->cacheDir . md5($key) . '.cache';\n if (!file_exists($file)) return null;\n \n if (time() - filemtime($file) > $ttl) {\n unlink($file);\n return null;\n }\n \n return unserialize(file_get_contents($file));\n }\n \n public function set($key, $data) {\n $file = $this->cacheDir . md5($key) . '.cache';\n file_put_contents($file, serialize($data));\n }\n}\n\n// Utilisation\n$cache = new FileCache();\n$result = $cache->get('expensive_query');\nif ($result === null) {\n $result = $db->query('SELECT ...');\n $cache->set('expensive_query', $result);\n}\n?>\n\n2. Memcached — mise en cache distribuée pour les charges élevées
\n\n2.1. Qu'est-ce que Memcached et quand l'utiliser
\n\nMemcached est un système de mise en cache distribué en mémoire vive. Il fonctionne sur le principe key-value et est idéal pour mettre en cache les résultats de requêtes SQL, les sessions utilisateur et les fragments HTML. Principaux avantages :
\n- \n
- Simplicité d'installation et de configuration \n
- Haute vi