Memcached

Memcached est un système de cache mémoire distribué. Il est beaucoup utilisé dans le monde du web afin d’accélérer le temps de réponse des sites puisqu’il va permettre de stocker objets et données en RAM accessibles depuis le réseau.

Un des avantages immédiat, sans avoir à modifier le code source d’un site, est d’utiliser memcached pour stocker les variables de session au lieu d’utiliser le disque local, permettant ainsi une économie relativement substantielle en terme d’Entrées/Sorties disque, mais aussi de pouvoir les partager entre plusieurs serveurs, particulièrement pratique dans le cadre d’un équilibrage de charge afin que les sessions restent actives lorsqu’une requête passe d’un serveur à l’autre.

Installation

Installez le paquet memcached :

emerge -av memcached

Configuration

/etc/conf.d/memcached

Editez le fichier /etc/conf.d/memcached et personnalisez les options selon vos besoins :

# Emplacement du binaire memcached
MEMCACHED_BINARY="/usr/bin/memcached"

# Quantité de RAM utilisée par memcached
MEMUSAGE="32"

# Le nombre maximum de connexions
MAXCONN="1024"

# Sur quelle adresse IP on écoute
LISTENON="localhost"

# Sur quel port TCP
PORT="11211"

# Sur quel port UDP (0 désactive le support)
UDPPORT="0"

# Le prefix du fichier de PID ('-${PORT}.${CONF}.pid')
PIDBASE="/var/run/memcached"

# Si vous souhaitez préciser d'autres options
MISC_OPTS=""

Utilisation

Démarrez le démon memcached :

/etc/init.d/memcached start

Et mettez-le au niveau de démarrage default :

rc-update add memcached

Sessions PHP

Nous allons donc stocker nos variables de session PHP dans memcached.

Deux extensions permettent de le faire pecl-memcache et pecl-memcached. Nous n’entrerons pas dans le détail des différences entre les deux extensions, sachez juste que pecl-memcache est plus ancien et comporte certaines limitations.

pecl-memcached

Installez l’extension PHP :

emerge -av pecl-memcached

Modifiez votre fichier php.ini comme ce qui suit :

[Session]
session.save_handler = memcached
session.save_path = "127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15"

Vous n’avez plus qu’à redémarrer votre démon web ou comme moi votre démon php-fpm.

Liens