Aller au contenu

Memcached

De Marmits Wiki
Version datée du 13 décembre 2025 à 16:52 par Geo (discussion | contributions) (Configurer MediaWiki avec PECL Memcached)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)

Memcached est un système de cache en mémoire rapide et léger utilisé pour stocker temporairement des données (objets, résultats de requêtes, sessions) afin d’accélérer les applications web. Il fonctionne en RAM, est multi-thread, et permet à plusieurs processus ou serveurs d’accéder à un cache partagé.

Sur Debian, le paquet memcached installe le démon serveur, la configuration système, et des outils pour gérer le cache, tandis que l’extension PHP (php-memcached) permet aux applications PHP (comme MediaWiki) de l’utiliser facilement.

Installer et activer Memcached sur Debian/Ubuntu avec PHP 8.3-FPM pour MediaWiki.


1️⃣ Installer Memcached côté serveur

sudo apt update
sudo apt install memcached libmemcached-tools

Vérifier que le service est actif :

systemctl status memcached

Tu dois voir :

Active: active (running)

Pour démarrer/activer au boot :

sudo systemctl enable --now memcached

2️⃣ Installer l’extension PHP Memcached pour PHP 8.3

sudo apt install php8.3-memcached

Redémarre PHP-FPM pour que l’extension soit prise en compte :

sudo systemctl restart php8.3-fpm

Vérifie l’extension :

php -m | grep memcached

Tu dois obtenir :

memcached

Ou avec une page phpinfo() côté web, tu dois voir memcached support: enabled.



3️⃣ Configurer MediaWiki pour utiliser Memcached

Dans LocalSettings.php, remplace tes caches existants :

$wgMainCacheType = CACHE_MEMCACHED;
$wgParserCacheType = CACHE_MEMCACHED;
$wgMessageCacheType = CACHE_MEMCACHED;
$wgSessionCacheType = CACHE_MEMCACHED;

$wgMemCachedServers = [ '127.0.0.1:11211' ];

$wgUseFileCache = false;  // inutile avec Memcached

4️⃣ Vérifier que Memcached fonctionne avec MediaWiki

  1. Crée une nouvelle page test
  2. Vérifie qu’elle est visible dans les catégories immédiatement après création
  3. Optionnel : purger les jobs pour être sûr que le parser cache est à jour :
php maintenance/runJobs.php --maxjobs=5000

5️⃣ Bonus : améliorer stabilité avec OPcache et APCu

Tu peux garder OPcache et APCu pour PHP, mais MediaWiki utilisera Memcached pour tout le cache partagé. Exemple :

$wgMainCacheType = CACHE_MEMCACHED;    // partagé
$wgParserCacheType = CACHE_MEMCACHED;  // partagé
$wgMessageCacheType = CACHE_MEMCACHED; // partagé

// côté PHP
; opcache.enable=1
; apcu.enable=1


** Installer l’extension PHP Memcached via PECL**

Si tu veux la dernière version ou si ton système ne propose pas php8.3-memcached via APT, tu peux installer l’extension Memcached avec PECL :

sudo apt update
sudo apt install php-pear php8.3-dev libmemcached-dev build-essential zlib1g-dev
sudo pecl install memcached

Pendant l’installation, PECL peut demander des options (compression, SASL). Tu peux laisser les valeurs par défaut si tu n’as pas besoin d’authentification.

Ensuite, active l’extension dans PHP :

echo "extension=memcached.so" | sudo tee /etc/php/8.3/mods-available/memcached.ini
sudo phpenmod memcached

Redémarre PHP-FPM :

sudo systemctl restart php8.3-fpm

Vérifie que l’extension est bien chargée :

php -m | grep memcached

Tu dois voir memcached.
Ou via phpinfo(), la section memcached support: enabled.



Configurer MediaWiki avec PECL Memcached

Dans LocalSettings.php, utilise l’implémentation PECL :

$wgMainCacheType = CACHE_MEMCACHED;
$wgParserCacheType = CACHE_MEMCACHED;
$wgMessageCacheType = CACHE_MEMCACHED;
$wgSessionCacheType = CACHE_MEMCACHED;
$wgMemCachedServers = [ '127.0.0.1:11211' ];

Pourquoi ?

memcached-pecl utilise la classe native Memcached (C), plus rapide et avec support SASL, compression, etc.

Nettoyage

Commandes servant à “vider” complètement les caches et sessions en cours. Elles agissent sur deux systèmes différents : PHP et Memcached.


1️⃣ sudo rm -f /var/lib/php/sessions/*

  • Objet : supprimer tous les fichiers de session PHP stockés sur disque.
  • PHP stocke parfois les sessions utilisateurs dans des fichiers sur le serveur (/var/lib/php/sessions/ par défaut sur Ubuntu/Debian).
  • Quand tu fais :
sudo rm -f /var/lib/php/sessions/*
  • Tu supprimes toutes les sessions en cours.
  • Conséquence : tous les utilisateurs connectés devront se reconnecter.
  • Utile pour repartir avec un état propre, par exemple après un problème de session ou après une migration.



2️⃣ echo "flush_all" | nc 127.0.0.1 11211

  • Objet : vider toutes les données stockées dans Memcached.
  • nc 127.0.0.1 11211 → se connecte au serveur Memcached local sur le port 11211.
  • flush_all → commande Memcached qui supprime toutes les clés en cache immédiatement.

Concrètement :

  • Cache de pages MediaWiki (parser cache, main cache)
  • Cache des sessions si $wgSessionCacheType = 'memcached-pecl'
  • Tout ce qui est temporairement stocké pour accélérer les requêtes



⚠️ Important

  • Après ces deux commandes, MediaWiki recalculera toutes les pages et sessions → certaines pages peuvent être lentes la première fois qu’on les charge (cache froid).
  • C’est utile pour résoudre des problèmes de session corrompue ou de cache invalide, mais pas à faire régulièrement en production.



En résumé :

Commande Cible Effet
rm -f /var/lib/php/sessions/* Sessions PHP sur disque Déconnecte tous les utilisateurs, supprime les sessions
nc 127.0.0.1 11211 Memcached Vide tous les caches (pages, sessions, objets)