Mais qu’est-ce donc ?
Tout simplement, Redis est un système de cache qui utilise la RAM de la machine afin d’avoir un accès rapide aux données avec un système de clé/valeur.
Je vais vous présenter comment mettre en place Redis sur Magento 1 et 2 afin que vous puissiez améliorer les performances côté serveur. Cet article sera, je l’espère, rapide et efficace, comme Redis !
Vite je veux le mettre en place, comment dois-je faire ?
Installation
Pour installer Redis sur votre machine et le rendre utilisable avec PHP en une seule commande (ceci n’est valable que pour Debian/Ubuntu) :
apt install redis-server php-redis
Et c’est tout !
Vérification
N’hésitons pas à vérifier l’installation, encore une fois c’est très simple il vous suffit juste de faire :
redis-cli ping
Si la réponse de Redis est PONG on est tout bon ! Si ce n’est pas le cas il vous reste à consulter les logs dans /var/log/redis/redis-server.log
De plus, il est possible de vérifier son statut comme tout autre service :
service redis-server status
Et dernière vérification pour s’assurer que PHP a bien pris en compte le module Redis :
php -m | grep redis
S’il n’y a aucun résultat il suffit d’activer le module :
phpenmod redis
Et Magento dans tout ça ?
Prérequis
Avant de vouloir configurer Redis pour Magento, une chose importante est à connaître : son port. Pour avoir la réponse, vous avez deux possibilités :
service redis-server status
ou
redis-cli info | grep port
Magento 1
Pour que Redis fonctionne avec Magento 1, il faut s’assurer que le module Cm_RedisSession soit bien activé. (voir etc/module)
Spécifier la configuration dans le etc/local.xml : premièrement, vérifiez que la balise <session_save> contient bien db et non file.
Ajouter ce code XML dans les balises <config><global>...</global></config> en prenant soin de vérifier le <port> par rapport aux prérequis (plus de détails ici https://github.com/colinmollenhour/Cm_RedisSession) :
<session_save>db</session_save>
<redis_session>
<host>127.0.0.1</host>
<port>6379</port>
<password></password>
<timeout>5</timeout>
<persistent></persistent>
<db>1</db>
<compression_threshold>2048</compression_threshold>
<compression_lib>gzip</compression_lib>
<log_level>1</log_level>
<max_concurrency>6</max_concurrency>
<break_after_frontend>5</break_after_frontend>
<break_after_adminhtml>30</break_after_adminhtml>
<first_lifetime>600</first_lifetime>
<bot_first_lifetime>60</bot_first_lifetime>
<bot_lifetime>7200</bot_lifetime>
<disable_locking>0</disable_locking>
<min_lifetime>60</min_lifetime>
<max_lifetime>2592000</max_lifetime>
</redis_session>
<cache>
<backend>Cm_Cache_Backend_Redis</backend>
<backend_options>
<server>127.0.0.1</server>
<port>6379</port>
<persistent></persistent>
<database>2</database>
<password></password>
<force_standalone>0</force_standalone>
<connect_retries>1</connect_retries>
<read_timeout>10</read_timeout>
<automatic_cleaning_factor>0</automatic_cleaning_factor>
<compress_data>1</compress_data>
<compress_tags>1</compress_tags>
<compress_threshold>20480</compress_threshold>
<compression_lib>gzip</compression_lib>
<use_lua>0</use_lua>
</backend_options>
</cache>
Ehh pssst ! On n’oubli jamais de vérifier, ça évite les surprises, surtout en prod. Si tu n’es pas intéressé par la configuration pour Magento 2 je t’invite à descendre un peu plus bas pour voir l’étape de vérification, elle est simple et rapide.
Magento 2
Pour Magento 2, même principe que pour Magento 1, une pincé de configuration et c’est parti !
Pour ceci vous allez devoir éditer le fichier app/etc/env.php pour y ajouter deux configurations, celle pour le stockage des sessions et celle pour le stockage des pages et du cache par défaut. (N’oubliez pas le port !)
Commençons par le stockage des sessions :
'session' => [
'save' => 'redis',
'redis' =>
[
'host' => '127.0.0.1',
'port' => '6379',
'password' => '',
'timeout' => '2.5',
'persistent_identifier' => '',
'database' => '2',
'compression_threshold' => '2048',
'compression_library' => 'gzip',
'log_level' => '1',
'max_concurrency' => '6',
'break_after_frontend' => '5',
'break_after_adminhtml' => '30',
'first_lifetime' => '600',
'bot_first_lifetime' => '60',
'bot_lifetime' => '7200',
'disable_locking' => '0',
'min_lifetime' => '60',
'max_lifetime' => '2592000'
]
],
Pour plus de détail je vous invite à voir la doc de Magento : https://devdocs.magento.com/guides/v2.3/config-guide/redis/redis-session.html
Passons au stockage des pages et du cache par défaut :
'cache' => [
'frontend' => [
'default' => [
'backend' => 'Cm_Cache_Backend_Redis',
'backend_options' => [
'server' => '127.0.0.1',
'database' => '0',
'port' => '6379'
],
],
'page_cache' => [
'backend' => 'Cm_Cache_Backend_Redis',
'backend_options' => [
'server' => '127.0.0.1',
'port' => '6379',
'database' => '1',
'compress_data' => '0'
]
]
]
],
Encore une fois je vous invite à en apprendre plus sur les configurations avec la doc Magento 2 : https://devdocs.magento.com/guides/v2.3/config-guide/redis/redis-pg-cache.html
Vérification (Magento 1 et 2)
Bien évidemment on vérifie !
Pour vérifier que Redis fonctionne correctement sur votre instance de Magento, tapez la commande suivante dans un terminal :
redis-cli monitor
Une fois la commande lancée, parcourez votre site. Les premiers chargements peuvent être longs mais ensuite cela deviendra bien plus rapide. Si Redis fonctionne correctement, vous devriez voir s’afficher dans le terminal ce que Redis fait (SELECT, HGET, ADD …) lors de votre navigation sur le front (chargement de collection, lecture de session ...).
Flush du cache
Le cache Redis se trouvant sur la RAM de votre machine, vous pouvez redémarrer votre machine pour le vider, mais ce n’est pas super pratique non ?
Pour faire plus simple, il vous suffit d’utiliser la commande redis-cli puis de faire un flushall :
kevin@kevin:~$ redis-cli
127.0.0.1:6379> flushall
OK
127.0.0.1:6379>
Bonus
Avant de se quitter j’ai une petit cadeau pour les plus intéressés par le sujet. Si vous souhaitez comprendre concrètement comment fonctionne Redis et ses multiples possibilités d’utilisation, vous pouvez vous amuser sur leur tuto intéractif : http://try.redis.io/
J’espère vous avoir aidé à améliorer vos performances serveurs. Je tiens à préciser une dernière chose : il n’y a pas que le cache qui rend vos applications performantes mais aussi le respect des bonnes pratiques et la qualité du code. Si vous souhaitez poursuivre la lecture sur ces aspects, je vous invite à lire cet article : https://black.bird.eu/fr/blog/les-10-commandements-magento-2.html