Mise en cache en PHP : Redis, Memcached et solutions intégrées

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 solutions intégrées — accélération des applications web



Chaque développeur PHP est confronté à des problèmes de performance : la base de données répond lentement, les pages mettent du temps à charger, et le serveur peine sous la charge. La solution à ces problèmes réside dans une mise en cache judicieuse. Dans cet article, nous allons examiner trois approches principales de la mise en cache en PHP : les mécanismes intégrés (APCu, OpCache), les serveurs externes Memcached et Redis. Vous apprendrez quel outil choisir en fonction de la situation et obtiendrez des exemples de code prêts à l'emploi pour l'implémentation.



1. Solutions intégrées : OpCache et APCu



Commençons par le plus simple — la mise en cache au niveau du moteur PHP. Deux composants clés se distinguent ici.



1.1. OpCache (cache de code opcode PHP)

OpCache est intégré à PHP depuis la version 5.5. Il met en cache le bytecode compilé (opcode) des scripts PHP. Sans lui, chaque requête analyse et compile à nouveau le code source — c'est un gaspillage de ressources. L'activation d'OpCache offre un gain de vitesse allant jusqu'à 30-50 % sans une seule ligne de code.

Configuration dans php.ini :

opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=4000opcache.revalidate_freq=60


1.2. APCu (Alternative PHP Cache user)

APCu est un cache pour les données utilisateur (variables, résultats de calculs). Il fonctionne en mémoire vive et est idéal pour stocker des données petites et fréquemment demandées : configurations, traductions, résultats de requêtes SQL simples.

Exemple d'utilisation d'APCu :

<?php// Enregistre les données dans le cache pendant 300 secondesapcu_store('site_config', $config, 300);

// Récupère les données du cache$cached = apcu_fetch('site_config');if ($cached === false) { // Données absentes — on charge et on enregistre $cached = loadConfigFromDB(); apcu_store('site_config', $cached, 300);}

// Supprime la cléapcu_delete('site_config');?>

Avantages : ne nécessite pas de services externes, simple à configurer, latence minimale. Inconvénients : fonctionne uniquement sur un seul serveur, les données sont perdues lors du redémarrage de PHP-FPM.



2. Memcached — cache distribué pour données simples



Memcached est un système de mise en cache distribué haute performance en mémoire vive. Il est idéal pour stocker des paires "clé-valeur" simples et des sessions. Contrairement à APCu, Memcached fonctionne comme un serveur distinct et peut être partagé par plusieurs serveurs web.



Installation de l'extension : pecl install memcached

Exemple de connexion et d'utilisation :

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

// Définition avec TTL (time to live) de 600 secondes$memcached->set('user_123_profile', $profileData, 600);

// Récupération$profile = $memcached->get('user_123_profile');if ($memcached->getResultCode() === Memcached::RES_NOTFOUND) { // Échec du cache — on charge depuis la BDD $profile = getUserProfileFromDB(123); $memcached->set('user_123_profile', $profile, 600);}

// Mise en cache des sessions (configuration dans php.ini)// session.save_handler = memcached// session.save_path = "localhost:11211"?>

Quand utiliser Memcached :

  • Mise en cache des résultats de requêtes SQL (listes de produits, catégories)
  • Stockage des sessions utilisateur dans un environnement distribué
  • Mise en cache de blocs HTML (par exemple, menu ou pied de page)

Limitations : pas de structures de données intégrées (uniquement des chaînes), taille maximale de valeur 1 Mo (peut être augmentée), pas de persistance — le cache est vidé lors du redémarrage du serveur.



3. Redis — cache avancé avec structures de données



Redis n'est pas seulement un cache, mais un véritable magasin de données en mémoire prenant en charge des types complexes : listes, ensembles, hachages, ensembles triés. Il prend en charge la persistance (sauvegarde sur disque),

Blogs

Book Recommendations