Magento Redis

REDIS: Magento Cache Backend & Session storage !

Sommaire

Qu’est-ce que REDIS ? Comment va-t-il rendre votre Magento très véloce ?!

Redis est une base de données de type clés-valeurs. Ses forces sont d’être extrêmement véloce et d’offrir une grande richesse d’opérations. Cela en fait un très bon complément à une base de données relationnelles pour venir renforcer des points précis comme le stockage du cache de Magento ! Car c’est bien d’utiliser le cache de Magento avec ou sans module complexe permettant d’étendre le cache « basique » de Magento mais encore faut-il choisir un support de stockage TRÉS rapide et le moins gourmand en ressources possible…

Voici les principaux atouts de Redis :

  • Des performances de stockage NoSQL impressionnantes (des centaines de milliers d’opérations à la seconde !) ;
  • La persistance, via des copies régulières de la mémoire (RAM) vers le disque ou écriture à chaque modification (non conseillé car ralentit les performances et pas utile vu qu’on y stocke que du cache) ;
  • Typage des valeurs, avec au choix, chaînes de caractères, listes, ensembles, ensembles triés et hashs (contrairement à Memcached par exemple – Redis power : plus besoin du slowbackend pour stocker l’association Tags<>Ids !) ;
  • Réplication de type maître/esclave ;
  • Serveur accessible par un pool de serveurs (comme Memcached) donc utilisable sur une architecture multi-serveurs
  • La simplicité à l’installer le gérer, la portabilité, etc.

Chez SOON nous utilisons Redis sur nos projets/serveurs depuis le mois d’octobre 2011 après avoir découvert ce serveur NoSQL ultra performant ; nous allons donc vous faire partager notre expérience en la matière et vous expliquer comment l’installer et paramétrer votre Magento (Community ou Enterprise – sans attendre Magento 2 !) pour qu’il l’utilise en seulement 10 minutes chrono !

Installation de Redis et du connecteur PHP

Téléchargez la dernière version stable de Redis sur le site officiel : http://redis.io/download

Ensuite décompressez et compilez Redis (nécessite le package gcc) comme suit puis lancez-le pour tester :

# cd /usr/share/
# tar xzf redis-2.4.11.tar.gz
# mv redis-2.4.11 redis
# cd redis
# make
# ./redis-server &

Redis est installé ; passons à l’installation de son connecteur avec PHP :

Téléchargez les sources de phpRedis sur https://github.com/nicolasff/phpredis puis compilez-le (nécessite la package php5-dev) :

# phpize
# ./configure
# make && make install

Copiez ensuite le fichier « redis.so » dans votre dossier d’extensions PHP puis éditez votre fichier de configuration PHP (généralement /etc/php5/conf.d/php.ini) afin d’ajouter cette ligne permettant de charger l’extension du connecteur PHP avec Redis :

extension=redis.so

Sauvez les modifications puis redémarrez votre serveur web afin qu’il prenne en compte ces changements.
C’est tout concernant les modifications coté serveur ; attaquons-nous maintenant à la configuration de Magento pour utilisez Redis…

Tuning de Redis pour environnement de production

On a vu à l’étape précédente comment installer Redis et son connecteur PHP ; l’étape du tuning n’est pas forcement nécessaire sur un environnement de développement mais pour une utilisation en production il faut faire les choses proprement :

wget -O init-deb.sh http://library.linode.com/assets/629-redis-init-deb.sh
adduser –system –no-create-home –disabled-login –disabled-password –group redis
mv init-deb.sh /etc/init.d/redis

Editez le fichier /etc/init.d/redis en adaptant le path vers « redis-server » et son fichier de configuration « redis.conf » (/usr/share/redis dans notre cas).

chmod +x /etc/init.d/redis
chown -R redis:redis /usr/share/redis
touch /var/log/redis.log
chown redis:redis /var/log/redis.log
update-rc.d -f redis defaults

Allons maintenant tuner le fichier de configuration Redis /usr/share/redis/redis.conf :

1 : Vous avez qu’un seul serveur ? On se connectera donc à Redis via son Socket afin d’outrepasser toute la couche réseau TCP/IP et ainsi gagner un peu plus en performance. Il faudra alors dans votre configuration Magento indiquer le chemin absolu vers le Socket au lieu de l’adresse IP et laisser vide le port :

daemonize yes
pidfile /var/run/redis.pid
port 0
unixsocket /var/run/redis.sock
unixsocketperm 755
timeout 2
loglevel notice
logfile /var/log/redis.log
syslog-enabled no
databases 2
#save 900 1
#save 300 10
#save 60 10000
rdbcompression no
maxclients 0

2 : Vous utilisez plusieurs frontaux web ? On se connectera donc à Redis via son IP:PORT (comme avec Memcached) :

daemonize yes
pidfile /var/run/redis.pid
port 6379
timeout 2
loglevel notice
logfile /var/log/redis.log
syslog-enabled no
databases 2
#save 900 1
#save 300 10
#save 60 10000
rdbcompression no
maxclients 0

Relancez Redis pour appliquer les changements de configuration :

/etc/init.d/redis stop
/etc/init.d/redis start

Redis is ready !

Paramétrage Magento pour utiliser le Cache Backend Redis

Rendez-vous sur le projet Github « Cm_Cache_Backend_Redis » de Colin Mollenhour (thanks !) à cette adresse : https://github.com/colinmollenhour/Cm_Cache_Backend_Redis

Téléchargez le fichier « Redis.php » permettant d’ajouter le Cache Backend « Redis » au Zend Framework puis copiez-le sur votre instance Magento dans ce répertoire :
app/code/community/Cm/Cache/Backend/
Téléchargez la librairie « Credis.php » puis copiez-la sur votre instance Magento dans ce répertoire :
lib/Credis/

Editez ensuite votre fichier de configuration Magento (local.xml) en ajoutant ces lignes permettant d’utiliser le nouveau Cache Backend Redis :

 <cache>
   <backend>Cm_Cache_Backend_Redis</backend>
   <backend_options>
      <server>127.0.0.1</server>
      <port>6379</port>
      <database>0</database>
      <force_standalone>0</force_standalone>
      <automatic_cleaning_factor>0</automatic_cleaning_factor>
      <compress_data>0</compress_data>
      <compress_tags>0</compress_tags>
      <compress_threshold>20480</compress_threshold>
      <compression_lib>gzip</compression_lib>
   </backend_options>
 </cache>

C’est terminé côté Magento ! Connectez-vous au backoffice ; purgez le cache et ça y est vous êtes parti avec le cache backend Redis !

Vous pouvez vérifiez les logs de Redis afin de vous assurer qu’il est bien utilisé lorsque vous naviguez sur votre site Magento ; vous devriez voir ça :

[20143] 04 Oct 23:34:45 – 0 clients connected (0 slaves), 790592 bytes in use
[20143] 04 Oct 23:34:49 – Accepted 127.0.0.1:35294
[20143] 04 Oct 23:34:50 – DB 0: 4 keys (0 vola&le) in 4 slots HT.
[20143] 04 Oct 23:34:50 – 1 clients connected (0 slaves), 800768 bytes in use
[20143] 04 Oct 23:34:50 – Client closed connec&on

Ou encore connectez-vous avec le client Redis pour afficher directement les clé qu’il stocke dans sa base :

# redis-cli
redis 127.0.0.1:6379> select 0
OK
redis 127.0.0.1:6379[2]> KEYS *
1) « zc:k:21d_STORE_DEFAULT_CONFIG_CACHE »
2) « zc:k:21d_STORE_ADMIN_CONFIG_CACHE »
3) « zc:ti:21d_TRANSLATE »

Paramétrage de Magento pour stocker les Session sous Redis

Rendez-vous sur le projet Github « Cm_RedisSession » à cette adresse : https://github.com/colinmollenhour/Cm_RedisSession

Téléchargez le dossier « code » permettant d’ajouter le module « RedisSession » puis copiez son contenu dans votre instance Magento ici :
app/code/community/Cm/RedisSession/
Téléchargez le fichier « Cm_RedisSession.xml » permettant de déclarer le module « RedisSession » puis copiez-le sur votre instance Magento ici :
app/etc/modules/

Editez ensuite votre fichier de configuration Magento en ajoutant ces lignes permettant d’utiliser le stockage des Sessions Magento sous Redis :

 <session_save>db</session_save>
 <redis_session>
   <host>127.0.0.1</host>
   <port>6379</port>
   <timeout>2.5</timeout>
   <db>1</db>
   <compression_threshold>0</compression_threshold>
   <compression_lib>gzip</compression_lib>
 </redis_session>

Attention au niveau du paramètre « db » de ne pas utiliser le même chiffre (n° de base Redis) que pour le cache backend sinon vos sessions seront purgées en même temps que le cache ce qui impactera votre frontoffice (déconnexion de vos clients / perte des paniers des « guest »).
Connectez-vous au backoffice ; purgez le cache et ça y est vous êtes parti avec les sessions Magento stockées sous Redis !

Magnifique non ? 😉
N’hésitez pas à me faire part de vos commentaires ou expériences avec Redis et Magento !

Let’s speed up your business !

Cache, Cache backend, E-Commerce, Magento, Magento redis howto, Optimisation, Redis, Redis session
  • MrSicks dit :

    Magnifique je ne sais pas, j’ai beau suivre les étapes je reste avec une base vide pour le moment lorsque je fais un keys * Pourtant j’ai bien suivi votre conf, j’ai même remis le port 6379 car le port ca m’empêche carrément de lancer redis correctement :/ Une idée à me suggérer ?

    • Aurélien dit :

      Bonjour,
      Entre-temps DotDeb a fourni des packages debian permettant d’installer simplement et rapidement REDIS + PHP5-REDIS ; il suffit alors d’ajouter les sources Dotdeb si vous êtes sous Debian et installer redis ainsi que son client php avec la commande « aptitude install redis-server php5-redis ».

      En espérant que cette procédure d’installation simplifiée pourra vous permettre de faie tourner Redis correctement.
      Bonne journée / Cdt,

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *