Aumentando la velocidad de WordPress con Redis

2020-12-26 - Categorías: WordPress

Este es un pequeño howto para instalar Redis con WordPress, y así ponerle un turbo a la página web. Unos sencillos pasos y explicaciones de lo que es, como instalarlo en el servidor. Además, unas pocas instrucciones para enlazar todo con el plugin Redis Object Cache, una joya del software para WordPress 😉

Siguiendo en la línea de las optimizaciones para WordPress, para mejorar el SEO, para disminuir el TTFB, que la web funcione ágil.. podemos llegar a esta optimización. Ésta se trata de una optimización de back, ya que se hace en la parte de la base de datos, aumentando la velocidad de las consultas.

Un poco de teoría

Redis es una base de datos, muy rápida, que almacena los datos en la memoria RAM, y por este motivo, que responde mucho más rápido que una base de datos tradicional como Mysql.

Esquema de sistemas genérico para una aplicación WordPress

Mysql almacena la mayor cantidad de los datos en el disco duro, almacenando sólo una pequeña cantidad en memoria RAM. Además en WordPress, por otro lado, tenemos una estructura de la base de datos en la que se hace un uso intenso del motor de la base de datos pero sin usar claves ajenas, con poca división en tablas de los datos. Tenemos muy pocas tablas con metadatos para los términos, usuarios, posts y comentarios. Tener así la estructura hará que crezcan rápido dichas tablas, generando un cuello de botella pronto en aplicaciones grandes basadas en WP.

Redis se pondrá entre la ejecución de la aplicación en PHP y la base de datos. Primeramente se harán las consultas más «lentamente» a Mysql según se vaya llenando Redis de datos. En las siguientes consultas, cuando ya se encuentren los datos en Redis, se usarán dichos datos más «rápidamente», con lo que se reducirán drásticamente la cantidad de ataques a Mysql.

Instalando en el servidor

Para una instalación en GNU/Linux con un servidor Ubuntu bastaría con ejecutar:

sudo apt install redis

Por defecto se pondrá a la escucha en la dirección 127.0.0.1:6379 sin contraseña. Esto puede ser peligroso, con lo que conviene consultar la documentación oficial de Redis, o cerrar los puertos desde el exterior.

Instalación en WordPress con Redis Object Cache

Hay varios plugins disponibles, pero uno que me ha gustado por su sencillez es el Redis Object Cache. Está disponible dentro de WordPress en la sección de plugins, al añadir plugins podemos buscarlo, instalarlo, activarlo y hacer la configuración por defecto dentro de su sección.

Si estamos haciendo una instalación más personalizada del servidor Redis, ya sea porque lo estamos instalando en un servidor remoto, protegido por contraseña, en un cluster, etc.. podremos configurar éste plugin con las definiciones disponibles:

define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_PASSWORD', 'secret');
define('WP_REDIS_TIMEOUT', 1);
define('WP_REDIS_READ_TIMEOUT', 1);
define('WP_REDIS_DATABASE', 0);
define('WP_REDIS_CLIENT', 'phpredis');
define('WP_REDIS_MAXTTL', 60 * 60 * 24 * 7);
define('WP_REDIS_DISABLED', true);

Probando los resultados

Podemos hacer unas pocas pruebas activando y desactivando el plugin. Por ejemplo en un WP que tengo para probar sin enlazar con Redis, en la página de configuración del plugin, se hacen 18 consultas como se puede ver en la imagen siguiente:

Una vez enlazado WP con Redis mediante el plugin activado, simplemente se hace 1 consulta a Mysql después de refrescar la página un par de veces, porque ya tendremos los datos en Redis:

En este caso se reducen las consultas de 18 a 1. Esto es mucha reducción. Y las latencias, sobretodo en el trabajo en el backend, se van a ver muy reducidas.

Terminando

Para terminar sólo me queda remitirte a la documentación oficial de Redis por si quieres seguir investigando:
https://redis.io/

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

© 2021 JnjSite.com - MIT license

Sitio hecho con WordPress, diseño y programación del tema por Jnj.