Mise en cache en PHP : Redis, Memcached et APCu — guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Mise en cache en PHP : Redis, Memcached et autres outils



La mise en cache est l'un des moyens les plus efficaces d'accélérer les applications web en PHP. Au lieu d'exécuter à chaque fois des requêtes lourdes vers la base de données ou de calculer des données complexes, vous enregistrez le résultat dans un stockage rapide. Dans cet article, nous allons passer en revue les principaux outils de mise en cache en PHP : Redis, Memcached, APCu et la simple mise en cache par fichiers. Vous apprendrez quand choisir quel outil et comment l'utiliser correctement.



Pourquoi la mise en cache est-elle nécessaire ?

Imaginez que votre site affiche une liste des dernières actualités. Sans mise en cache, chaque utilisateur oblige PHP à exécuter une requête SQL, à traiter les données et à générer du HTML. Si 1000 personnes accèdent au site par minute, la base de données subit une énorme charge. Le cache permet de conserver le résultat pendant 5 à 10 minutes et de le fournir instantanément.



Principaux cas d'utilisation du cache en PHP :

  • Résultats de requêtes SQL lourdes
  • Fragments HTML de pages
  • Données de requêtes API vers des services externes
  • Sessions utilisateurs
  • Configurations et paramètres


1. Redis — le roi de la mise en cache

Redis est un stockage de données en mémoire fonctionnant sur le principe « clé-valeur ». Il prend en charge des structures de données complexes : listes, ensembles, tables de hachage. Pour PHP, il existe l'extension populaire phpredis et la bibliothèque plus moderne Predis.



Installation et connexion

Installez Redis sur le serveur, puis installez l'extension via Composer :

composer require predis/predis


Exemple de travail avec Redis en PHP

<?phprequire 'vendor/autoload.php';

use Predis\\Client;

$client = new Client([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379,]);

// Enregistrer les données pour 10 minutes$client->setex('news_list', 600, json_encode($newsData));

// Récupérer les données$cached = $client->get('news_list');if ($cached) { $newsData = json_decode($cached, true);} else { // Requête à la BDD et enregistrement dans le cache}?>


Avantages de Redis : grande vitesse (microsecondes), suppression automatique des clés obsolètes (TTL), prise en charge de Pub/Sub, transactions. Inconvénient : il consomme de la mémoire vive.



2. Memcached — simplicité et vitesse

Memcached est un autre stockage en mémoire, mais plus simple que Redis. Il ne stocke que des chaînes de caractères et ne prend pas en charge les structures de données complexes. Cependant, pour la mise en cache de base, il est idéal.



Exemple avec Memcached

<?php$memcached = new Memcached();$memcached->addServer('127.0.0.1', 11211);

$key = 'user_profile_123';$data = $memcached->get($key);

if ($data === false) { // Les données ne sont pas dans le cache — les récupérer depuis la BDD $data = getUserProfileFromDB(123); $memcached->set($key, $data, 300); // 5 minutes}?>


Memcached est plus rapide que Redis pour les opérations simples get/set, mais moins fonctionnel. Il convient pour la mise en cache des résultats de requêtes et des sessions.



3. APCu — cache au niveau PHP

APCu (Alternative PHP Cache) est une extension qui stocke les données directement dans la mémoire du processus PHP. Il ne nécessite pas de serveur séparé, mais ne fonctionne que sur un seul serveur.



Exemple avec APCu

<?php// Enregistrer une valeur pour 10 minutesapcu_store('site_config', $config, 600);

// Récupérer la valeur$config = apcu_fetch('site_config');if ($config === false) { // Charger la configuration depuis un fichier $config = parse_ini_file('config.ini'); apcu_store('site_config', $config, 600);}?>


APCu est idéal pour la mise en cache des configurations, des modèles et des petites données qui changent rarement. Inconvénient : les données sont perdues lors du redémarrage de PHP ou du serveur web.



4.

Recommendations