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/predisExemple 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.
Aussi dans la bibliothèque
Travailler avec CSV en PHP : lecture, écriture et traitement des données
gRPC pour TypeScript : bibliothèques et exemples d'utilisation
ORM pour Kotlin : comparaison et exemples (Exposed, Ktorm, Hibernate)
Jetons JWT en Swift : guide complet pour travailler avec les JSON Web Tokens