Programmation PHP/Memcached
Memcached est un système d'usage général servant à gérer la mémoire cache distribuée. Il est souvent utilisé pour augmenter la vitesse de réponse des sites web créés à partir de bases de données. Il gère les données et les objets en RAM de façon à réduire le nombre de fois qu'une même donnée stockée dans un périphérique externe est lue. Il tourne sous Unix, Windows et MacOS et est distribué selon les termes d'une licence libre dite permissive[1].
Installation
[modifier | modifier le wikicode]Memcached s'installe sur un serveur de mémoire cache distribuée, base de données de paires clé-valeur, qui est accessible par ses clients sur le port 11211, en TCP ou UDP[2].
Installation :
sudo apt-get install memcached
Client
[modifier | modifier le wikicode]Sur Docker PHP :
RUN pecl install memcached \
&& docker-php-ext-enable memcache
Test
[modifier | modifier le wikicode] telnet localhost 11211
Si ça fonctionne sur le serveur mais pas depuis les autres machines, c'est certainement qu'il écoute 127.0.0.1 au lieu de son IP externe. Pour le vérifier :
netstat -an | grep ":11211"
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN
ou
ss -nlt | grep 11211
LISTEN 0 1024 127.0.0.1:11211
Pour le résoudre :
sudo vim /etc/memcached.conf
sudo /etc/init.d/memcached restart
Commandes
[modifier | modifier le wikicode]- Reset mémoire :
echo "flush_all" | nc -q 1 localhost 11211
Utilisation
[modifier | modifier le wikicode]Memcached propose plusieurs commandes[3]. Pour tester si le serveur fonctionne avant de l'utiliser en PHP, on peut donc les lancer avec telnet nom_du_serveur 11211.
stats: informations sur le cache en cours.set: ajoute une paire clé-valeur dans le cache.add: ajoute une paire clé-valeur uniquement si la clé n'existe pas déjà.get: récupère la valeur à partir de la clé donnée en paramètre.delete: supprime la paire clé-valeur de la clé donnée.flush_all: supprime tout ce qu'il y a dans le cache.
Par exemple pour lire une clé, il faut d'abord voir les descriptions de toutes les clés :
stats items
STAT items:1:number 1
...
STAT items:2:number 1
...
STAT items:3:number 1
...
Puis l'appeler par son numéro pour voir son nom (le zéro représente l'absence de limite) :
stats cachedump 1 0
Utilisation en PHP
[modifier | modifier le wikicode]Installation
[modifier | modifier le wikicode]Pour vérifier l'installation de la bibliothèque PHP pour Memcached :
php -i |grep memcached
- S'il est absent, il peut être installé par plusieurs méthodes :
Dans Debian Stable, préférer les paquets validés par la distribution à PECL, les paquets suivants fonctionnent sous Debian 12.9 stable :
$ sudo apt install memcached libmemcached-tools php-memcached
Dans le cas général, quand tout se passe bien, on peut utiliser PECL :
sudo pecl install memcached
Utilisation dans PHP
[modifier | modifier le wikicode]L'utilisation dans PHP est très simple :
$memcached = new \Memcached();
$memcached->addServer('127.0.0.1', 11211);
$memcached->set('nom du test', 'valeur du test');
echo $memcached->get('nom du test');
On peut, très facilement, écrire des librairies PHP pour combiner cache mémoire et cache disque ou cache mémoire et bases de données. Ces dernières disposent elles-mêmes, bien souvent, de mécanismes de caching mémoire. Il faut donc évaluer l'intérêt et mesurer les performances au cas-par-cas.
Références
[modifier | modifier le wikicode]- ↑ (en) « License of memcached »
- ↑ « Amplification d'attaque DDoS : Memcached fait exploser les compteurs » (consulté le 19 octobre 2018)
- ↑ https://github.com/memcached/memcached/wiki/Commands

