Redis est un système Open-Source permettant de stocker en mémoire RAM de l’information sous la forme de clé-valeur. C’est un système très puissant pour améliorer la rapidité de votre site web wordpress ou tout autres applications.
Plus puissant que Memcached, Redis permet de stocker des structures de données comme des chaines, des hashes, des listes, des sets (triés et non triés), des données de géolocalisation, …
Dans le cadre de l’optimisation d’un site WordPress, Redis sera utilisé (via un plugin) pour stocker les données mises en cache grâce aux objets WP_Object_Cache. Ceci permettra de diminuer la charge de votre serveur (CPU et accès bases de données) et rendra votre site beaucoup plus rapide !
Etape 1 : Installer et configurer Redis Server
Pour installer Redis Server sur un serveur Ubuntu, exécutez les commandes suivantes :
sudo apt update
sudo apt install redis-server
Après l’exécution de ces commandes, Redis Server est déjà installé sur votre serveur. Mais une modification importante est à réaliser dans le fichier de configuration de Redis Server.
sudo nano /etc/redis/redis.conf
Pour que le serveur Redis se lance au démarrage de votre serveur (systemd), vous devez modifier le paramètre suivant :
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
# They do not enable continuous liveness pings back to your supervisor.
supervised no
Doit être modifié par :
supervised systemd
Une fois cette modification effectuée, redémarrez le serveur Redis avec la commande suivante :
sudo systemctl restart redis.service
Etape 2 : Vérifier si le serveur Redis est actif
Arrivé à cette étape, vous devriez déjà avoir un serveur Redis fonctionnel. Mais si vous souhaitez vérifier que l’installation s’est déroulée sans problème et que votre serveur est correctement lancé, exécutez la commande suivante :
sudo systemctl status redis
Si cette commande est exécutée sans retourner d’erreur, vous devriez voir quelque chose comme ceci :
ubuntu@server:~$ sudo systemctl status redis
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-10-29 19:44:38 UTC; 3min 47s ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Process: 14601 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)
Process: 14609 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
Main PID: 14630 (redis-server)
Tasks: 4 (limit: 4915)
CGroup: /system.slice/redis-server.service
└─14630 /usr/bin/redis-server 127.0.0.1:6379
On peut voir que le serveur est Active (running) ce qui signifie que tout est ok.
Il se peut aussi que vous ayez le message d’erreur ci-dessous. Même si cela ne semble pas vraiment poser de problème, je vous explique un peu plus loin comment résoudre cette erreur.
redis-server.service: Can't open PID file /var/run/redis/redis-server.pid (yet?) after start: No such file
Une autre façon de vérifier que le serveur Redis est correctement installé est d’exécuter une commande permettant de récupérer la version du serveur Redis.
$ redis-server -v
Redis server v=4.0.9 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=9435c3c2879311f3
Etape 3 : Tester votre serveur Redis
Pour se connecter en ligne de commande au serveur Redis, vous pouvez exécuter la commande redis-cli.
ubuntu@server:~$ redis-cli
127.0.0.1:6379>
A partir de là, vous pouvez entrer des commandes redis. Un exemple simple pourrait-être :
127.0.0.1:6379> set test "Welcome to ExoConsult"
OK
127.0.0.1:6379> get test
"Welcome to ExoConsult"
127.0.0.1:6379>
Troubleshooting
Can’t open PID file redis-server.pid
Pour résoudre l’erreur ci-dessous lors de l’exécution de la commande
sudo systemctl status redis
Oct 29 19:44:38 server systemd[1]: Starting Advanced key-value store...
Oct 29 19:44:38 server systemd[1]: redis-server.service: Can't open PID file /var/run/redis/redis-server.pid (yet?) after start: No such file or directory
Oct 29 19:44:38 server systemd[1]: Started Advanced key-value store.
Voici la solution :
sudo nano /etc/systemd/system/redis.service
Dans [Service], ajouter une nouvelle ligne avec le code :
ExecStartPost=/bin/sh -c "echo $MAINPID > /var/run/redis/redis.pid"
La section devrait ressembler à
[Service]
Type=forking
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf
ExecStop=/bin/kill -s TERM $MAINPID
ExecStartPost=/bin/sh -c "echo $MAINPID > /var/run/redis/redis.pid"
PIDFile=/var/run/redis/redis-server.pid
Enregistrez les modifications et exécutez les commandes suivantes pour que la modification prenne effet.
sudo systemctl daemon-reload
sudo systemctl enable redis-server
sudo systemctl restart redis.service
Et l’erreur devrait avoir disparu
ubuntu@server:/home$ sudo systemctl status redis.service
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-10-29 23:16:05 UTC; 10min ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Process: 2317 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)
Process: 2342 ExecStartPost=/bin/sh -c echo $MAINPID > /var/run/redis/redis.pid (code=exited, status=0/SUCCESS)
Process: 2320 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
Main PID: 2341 (redis-server)
Tasks: 4 (limit: 4915)
CGroup: /system.slice/redis-server.service
└─2341 /usr/bin/redis-server 127.0.0.1:6379
Oct 29 23:16:04 server systemd[1]: Starting Advanced key-value store...
Oct 29 23:16:05 server systemd[1]: Started Advanced key-value store.
Pour en savoir plus
Il existe beaucoup de matériel didactique sur internet pour apprendre à utiliser votre tout nouveau serveur redis.
Voici une liste de quelques sites intéressants :
- Quickstart du site officiel Redis : https://redis.io/topics/quickstart
- Liste des commandes : https://redis.io/commands
- Une vidéo tutoriel très intéressante : https://www.youtube.com/watch?v=KUmXD_ubJU0
- Procédure d’installation en anglais : https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04
- Plus d’informations sur le systemd d’ubuntu : https://doc.ubuntu-fr.org/systemd
Etape 4 : Installer l’extension PHP Redis
L’extension phpredis fournit une API pour permettre la communication entre votre serveur Web et le serveur Redis.
Installez les packages suivants :
sudo apt-get update
sudo apt-get install -y autoconf
Téléchargez le code source de phpredis depuis le site web officiel et exécutez les commandes suivantes :
wget https://pecl.php.net/get/redis-VERSION.tgz
tar xzf redis-VERSION.tgz
cd redis-VERSION
/opt/bitnami/php/bin/phpize
./configure --with-php-config=/opt/bitnami/php/bin/php-config
make
sudo make install
A la fin de l’opération, vous devriez avoir le message suivant :
ubuntu@server:~/redis-5.3.2$ sudo make install
Installing shared extensions: /opt/bitnami/php/lib/php/extensions/
Ces commandes sont à exécuter dans votre répertoire /home/ubuntu.
Pour connaître la dernière version de phpredis disponible, rendez-vous à l’adresse suivante : https://pecl.php.net/package/redis
Au moment d’écrire ces lignes, la dernière version stable est : https://pecl.php.net/get/redis-5.3.2.tgz
Etape 5 : Activer l’extension dans php.ini
On a vu au point précédent comment installer l’extension permettant à PHP de communiquer avec votre serveur Redis. Il faut maintenant activer cette extension au niveau du serveur PHP.
sudo nano /opt/bitnami/php/etc/php.ini
Ajouter le texte suivant dans la partie « Dynamic Extensions »
extension=redis.so
Pour que les changements soient effectifs, n’oubliez pas de redémarrer Apache (et au besoin PHP-FPM) :
sudo /opt/bitnami/ctlscript.sh restart apache
sudo /opt/bitnami/ctlscript.sh restart php-fpm
Etape 6 : Vérifier l’instalation de l’extension redis
/opt/bitnami/php/bin/php -m | grep redis
Si redis apparaît, alors c’est que tout est ok !
Liens utiles concernant l’extension PHP Redis
- Documentation Bitnami : https://docs.bitnami.com/bch/apps/discourse/configuration/install-modules-php/
- Site officiel permettant de télécharger les sources : https://pecl.php.net/package/redis
Résolution des problèmes
Problème avec la commande phpize
ubuntu@exoweb:~/redis-5.3.2$ phpize
Command 'phpize' not found, but can be installed with:
sudo apt install php7.2-dev
Si vous utilisez un stack Bitnami, la commande a utiliser est la suivante :
/opt/bitnami/php/bin/phpize
La commande configure ne fonctionne pas
ubuntu@server:~/redis-5.3.2$ sudo ./configure
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
checking for cc... no
checking for gcc... no
configure: error: in `/home/ubuntu/redis-5.3.2':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
Cela signifie qu’il n’y a pas de compilateur installé sur votre machine. Pour installer un compiler (type gcc) ainsi que toute une série d’autres outils :
sudo apt-get update
sudo apt-get install build-essential
A la fin d’exécution de cette commande, vous devriez avoir installé les utilitaires suivants :
Setting up manpages-dev (5.05-1) ...
Setting up libfile-fcntllock-perl (0.22-3build4) ...
Setting up libalgorithm-diff-perl (1.19.03-2) ...
Setting up binutils-common:amd64 (2.34-6ubuntu1) ...
Setting up linux-libc-dev:amd64 (5.4.0-52.57) ...
Setting up libctf-nobfd0:amd64 (2.34-6ubuntu1) ...
Setting up libgomp1:amd64 (10.2.0-5ubuntu1~20.04) ...
Setting up libfakeroot:amd64 (1.24-1) ...
Setting up fakeroot (1.24-1) ...
update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode
Setting up make (4.2.1-1.2) ...
Setting up libquadmath0:amd64 (10.2.0-5ubuntu1~20.04) ...
Setting up libmpc3:amd64 (1.1.0-1) ...
Setting up libdpkg-perl (1.19.7ubuntu3) ...
Setting up libubsan1:amd64 (10.2.0-5ubuntu1~20.04) ...
Setting up libcrypt-dev:amd64 (1:4.4.10-10ubuntu4) ...
Setting up libisl22:amd64 (0.22.1-1) ...
Setting up libbinutils:amd64 (2.34-6ubuntu1) ...
Setting up libc-dev-bin (2.31-0ubuntu9.1) ...
Setting up libalgorithm-diff-xs-perl (0.04-6) ...
Setting up libcc1-0:amd64 (10.2.0-5ubuntu1~20.04) ...
Setting up liblsan0:amd64 (10.2.0-5ubuntu1~20.04) ...
Setting up libitm1:amd64 (10.2.0-5ubuntu1~20.04) ...
Setting up gcc-9-base:amd64 (9.3.0-17ubuntu1~20.04) ...
Setting up libalgorithm-merge-perl (0.08-3) ...
Setting up libtsan0:amd64 (10.2.0-5ubuntu1~20.04) ...
Setting up libctf0:amd64 (2.34-6ubuntu1) ...
Setting up libasan5:amd64 (9.3.0-17ubuntu1~20.04) ...
Setting up cpp-9 (9.3.0-17ubuntu1~20.04) ...
Setting up libc6-dev:amd64 (2.31-0ubuntu9.1) ...
Setting up binutils-x86-64-linux-gnu (2.34-6ubuntu1) ...
Setting up binutils (2.34-6ubuntu1) ...
Setting up dpkg-dev (1.19.7ubuntu3) ...
Setting up libgcc-9-dev:amd64 (9.3.0-17ubuntu1~20.04) ...
Setting up cpp (4:9.3.0-1ubuntu2) ...
Setting up gcc-9 (9.3.0-17ubuntu1~20.04) ...
Setting up libstdc++-9-dev:amd64 (9.3.0-17ubuntu1~20.04) ...
Setting up gcc (4:9.3.0-1ubuntu2) ...
Setting up g++-9 (9.3.0-17ubuntu1~20.04) ...
Setting up g++ (4:9.3.0-1ubuntu2) ...
update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode
Setting up build-essential (12.8ubuntu1.1) ...
Etape 7 : Installer un plugin wordpress
Lorsque votre serveur Redis est fonctionnel et que vous avez correctement activé l’extension Redis pour PHP, vous pouvez améliorer la performance de votre site WordPress en installant le plugin adéquat.
Personnellement, j’ai opté pour le plugin de chez Hummingbird Pro de chez WPMU. Pour télécharger et installer ce plugin, vous devez souscrire un abonnement payant, mais vous aurez ensuite accès à des plugins de très grande qualité comme Smush Pro, Defender Pro, …