« Memcached » : différence entre les versions

Page créée avec « 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’extensi... »
 
 
(4 versions intermédiaires par le même utilisateur non affichées)
Ligne 3 : Ligne 3 :
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.
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. =  
=Installer et activer '''Memcached sur Debian/Ubuntu avec PHP 8.3-FPM''' pour MediaWiki. ==


-----
-----


== '''1️⃣ Installer Memcached côté serveur''' ==
=== '''1️⃣ Installer Memcached côté serveur''' ===


<syntaxhighlight lang="bash">sudo apt update
<syntaxhighlight lang="bash">sudo apt update
Ligne 23 : Ligne 23 :
-----
-----


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


<syntaxhighlight lang="bash">sudo apt install php8.3-memcached</syntaxhighlight>
<syntaxhighlight lang="bash">sudo apt install php8.3-memcached</syntaxhighlight>
Ligne 40 : Ligne 40 :
-----
-----


== '''3️⃣ Configurer MediaWiki pour utiliser Memcached''' ==
=== '''3️⃣ Configurer MediaWiki pour utiliser Memcached''' ===


Dans <code>LocalSettings.php</code>, remplace tes caches existants :
Dans <code>LocalSettings.php</code>, remplace tes caches existants :
Ligne 55 : Ligne 55 :
-----
-----


== '''4️⃣ Vérifier que Memcached fonctionne avec MediaWiki''' ==
=== '''4️⃣ Vérifier que Memcached fonctionne avec MediaWiki''' ===


# Crée une nouvelle page test
# Crée une nouvelle page test
Ligne 65 : Ligne 65 :
-----
-----


== '''5️⃣ Bonus : améliorer stabilité avec OPcache et APCu''' ==
=== '''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 :
Tu peux garder OPcache et APCu pour PHP, mais MediaWiki utilisera '''Memcached pour tout le cache partagé'''. Exemple :
Ligne 77 : Ligne 77 :
; apcu.enable=1
; apcu.enable=1
</syntaxhighlight>
</syntaxhighlight>
== ** Installer l’extension PHP Memcached via PECL** ==
Si tu veux la '''dernière version''' ou si ton système ne propose pas <code>php8.3-memcached</code> via APT, tu peux installer l’extension '''Memcached''' avec '''PECL''' :
<syntaxhighlight lang="bash">sudo apt update
sudo apt install php-pear php8.3-dev libmemcached-dev build-essential zlib1g-dev
sudo pecl install memcached</syntaxhighlight>
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 :
<syntaxhighlight lang="bash">echo "extension=memcached.so" | sudo tee /etc/php/8.3/mods-available/memcached.ini
sudo phpenmod memcached</syntaxhighlight>
Redémarre PHP-FPM :
<syntaxhighlight lang="bash">sudo systemctl restart php8.3-fpm</syntaxhighlight>
Vérifie que l’extension est bien chargée :
<syntaxhighlight lang="bash">php -m | grep memcached</syntaxhighlight>
Tu dois voir <code>memcached</code>.<br />
Ou via <code>phpinfo()</code>, la section '''memcached support: enabled'''.
-----
=== '''Configurer MediaWiki avec PECL Memcached''' ===
Dans <code>LocalSettings.php</code>, utilise l’implémentation PECL :
<syntaxhighlight lang="php">
$wgMainCacheType = CACHE_MEMCACHED;
$wgParserCacheType = CACHE_MEMCACHED;
$wgMessageCacheType = CACHE_MEMCACHED;
$wgSessionCacheType = CACHE_MEMCACHED;
$wgMemCachedServers = [ '127.0.0.1:11211' ];</syntaxhighlight>
<blockquote>'''Pourquoi ?'''<br />
<code>memcached-pecl</code> utilise la classe native '''Memcached''' (C), plus rapide et avec support SASL, compression, etc.
</blockquote>
== Nettoyage ==
Commandes servant '''à “vider” complètement les caches et sessions en cours'''. Elles agissent sur deux systèmes différents : PHP et Memcached.
-----
==== 1️⃣ <code>sudo rm -f /var/lib/php/sessions/*</code> ====
* '''Objet''' : supprimer tous les fichiers de session PHP stockés sur disque.
* PHP stocke parfois les sessions utilisateurs dans des fichiers sur le serveur (<code>/var/lib/php/sessions/</code> par défaut sur Ubuntu/Debian).
* Quand tu fais :
<syntaxhighlight lang="bash" copy>sudo rm -f /var/lib/php/sessions/*</syntaxhighlight>
* 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️⃣ <code>echo &quot;flush_all&quot; | nc 127.0.0.1 11211</code> ====
* '''Objet''' : vider '''toutes les données stockées dans Memcached'''.
* <code>nc 127.0.0.1 11211</code> → se connecte au serveur Memcached local sur le port 11211.
* <code>flush_all</code> → commande Memcached qui '''supprime toutes les clés en cache immédiatement'''.
Concrètement :
* Cache de pages MediaWiki (<code>parser cache</code>, <code>main cache</code>)
* Cache des sessions si <code>$wgSessionCacheType = 'memcached-pecl'</code>
* 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é :
{| class="wikitable"
|-
! Commande
! Cible
! Effet
!
|-
| <code>rm -f /var/lib/php/sessions/*</code>
| Sessions PHP sur disque
| Déconnecte tous les utilisateurs, supprime les sessions
|
|-
| <code>echo &quot;flush_all&quot;              | nc 127.0.0.1 11211</code>
| Memcached
| Vide tous les caches (pages, sessions, objets)
|
|}
-----




[[Catégorie:Linux]] [[category:php]]
[[Catégorie:Linux]] [[category:php]]