Redis est un magasin de structure de données en mémoire open source (sous licence BSD), utilisé comme base de données, cache et courtier de messages. Il peut être combiné avec d'autres bases de données comme MySQL pour fournir un mécanisme de mise en cache de vos requêtes.
Dans cet article, nous allons montrer comment mettre en cache les requêtes MySQL nécessaires pour rendre les pages WordPress. Cela nous apportera des gains de performances significatifs, mais avec quelques mises en garde.
Introduction à une meilleure mise en cache WordPress
WordPress utilise la base de données MySQL pour mettre en cache les objets internes de l'application (fil d'Ariane, éléments de menu, etc.) qui peuvent être coûteux à générer. Étant donné que la base de données gère également les requêtes pour les demandes de page, il s'agit probablement du goulot d'étranglement le plus courant et entraîne souvent une augmentation des temps de chargement.
Redis fournit un mécanisme de mise en cache qui agit comme une alternative à la base de données MySQL. Si un utilisateur visite une page WordPress, les requêtes MySQL requises pour générer la page sont servies via Redis qui met en cache les résultats. Cela se traduit par des temps de chargement extrêmement rapides, comparables à ceux des pages statiques.
Un autre choix de mise en cache populaire est Memcached. Cependant, Redis fait presque tout ce que Memcached fait, nous allons donc utiliser l'hébergement ScaleGrid pour Redis™* pour les besoins de ce didacticiel.
Comment fonctionne la mise en cache Redis ?
Lorsqu'un utilisateur demande une page WordPress pour la première fois, une requête MySQL est effectuée sur le serveur. Redis met cette requête en cache. Ainsi, lorsqu'un autre utilisateur demande la même page WordPress, les résultats sont fournis par Redis sans qu'il soit nécessaire d'interroger à nouveau la base de données.
Si la requête n'est pas mise en cache dans Redis, les résultats sont fournis par MySQL, qui sont ensuite ajoutés au cache Redis.
Si une valeur particulière est mise à jour dans la base de données, la valeur Redis correspondante est invalidée pour empêcher que des données de cache incorrectes ne soient fournies à l'utilisateur.
Exigences du didacticiel
Voici la liste des technologies utilisées dans cet article :
- 2 installations WordPress (avec et sans le plugin, pour les benchmarks)
- Serveur Redis™
- Plug-in de cache d'objets Redis WP
Installation WordPress
Vous pouvez télécharger la dernière version de WordPress ici et configurer deux installations différentes sur un hôte comme Heroku ou AWS.
Serveur Redis
ScaleGrid fournit une prise en charge de classe mondiale pour les clusters Redis™ Standalone et Master/Slave avec des fonctionnalités de sécurité améliorées. Nous utiliserons un cluster Redis™ autonome hébergé sur ScaleGrid avec la stratégie de mise en cache Allkeys-LRU, et vous pouvez vous inscrire pour un essai gratuit de 30 jours de notre hébergement pour Redis™ pour vous aider dans ce didacticiel.
Plug-in de cache d'objets Redis WP
Ce plug-in est utilisé comme complément à votre installation WordPress et peut être configuré pour utiliser l'hôte Redis™. Vous pouvez trouver le plugin ici.
Instructions d'installation :Redis Object Cache pour WordPress
Voici les étapes à suivre pour installer le plug-in de cache d'objets Redis sur une installation WordPress.
Étape 1 :Installez le plug-in de cache Redis
Ce tutoriel suppose que vous avez déjà configuré deux nouvelles installations de WordPress. Sur l'un d'eux, vous devez installer le plugin Redis Object Cache. Une fois le plugin installé, vous pouvez l'activer depuis le menu des plugins.
Étape 2 :Recherchez Redis dans vos paramètres
Une fois le plugin activé, une option Redis apparaîtra dans le menu Paramètres.
Étape 3 :Ajouter des configurations WordPress
Après avoir configuré le plugin, nous devons ajouter des options de configuration au fichier de configuration WordPress. Au minimum, vous devrez configurer les options suivantes :
define('WP_REDIS_HOST', ''); define('WP_REDIS_PASSWORD', '');
Vous pouvez trouver les options ci-dessus sur la page Détails du cluster ScaleGrid pour Redis™.
Enregistrez la configuration et activez le cache d'objets. Si l'authentification est correcte, vous devriez voir l'écran suivant :
À ce stade, Redis a été configuré comme cache pour votre installation WordPress.
Surveillance et débogage des requêtes WordPress
Tous les clusters Redis sont installés avec l'outil d'interface de ligne de commande Redis (redis-cli) que vous pouvez utiliser pour surveiller les requêtes entrantes de WordPress. Voici une capture d'écran de ce à quoi cela pourrait ressembler :
Si vous ne voyez aucune sortie sur la console, accédez au site Web WordPress et actualisez.
Métriques WordPress et Redis à suivre
La principale mesure à suivre ici est le temps de chargement de la page. Voici la configuration par défaut que nous utilisons pour la nouvelle installation :
- WordPress : 4.9.5
- Redis :v.4.0.2
- Thème WordPress :Vingt-sept
Sur la base d'une nouvelle installation sur les paramètres ci-dessus, nous pouvons constater une réduction de près de 50 % des temps de chargement des pages :
- Sans le cache d'objets Redis =~900 ms
- Avec le cache d'objets Redis = ~400 ms
Inconvénients du cache d'objets Redis
Il y a quelques mises en garde concernant l'utilisation de l'approche Redis Object Cache sur WordPress. Le mécanisme de mise en cache ne fonctionne pas bien si vous avez beaucoup de plugins et de thèmes installés. Cela est dû au fait que toutes leurs données devraient également être mises en cache avec Redis.
Vous pouvez également découvrir comment mettre en cache des tweets à l'aide de Node.js, Redis et Socket.io dans notre article précédent.
Comme toujours, si vous construisez quelque chose de génial, envoyez-nous un tweet à ce sujet @scalegridio. Si vous avez besoin d'aide pour gérer ou héberger la base de données MongoDB® ou Redis™, contactez-nous à [email protected].