Cómo integrar Redis en Drupal: guía práctica y optimización avanzada

Por Nacho Morato, 12 Julio, 2025

¿Notas que tu sitio Drupal no va tan rápido como te gustaría? Muchos administradores de sitios web se enfrentan a este problema, especialmente cuando empiezan a crecer en visitas o contenido. Por suerte, existen soluciones para mejorar el rendimiento de Drupal y una de las más efectivas es la integración de Redis como sistema de cache. En este artículo descubrirás, con detalle y sin saltarte ningún paso, cómo y por qué Redis puede revolucionar la velocidad y estabilidad de tu web Drupal.

Tal vez hayas oído hablar de otros sistemas de cache como Memcache, pero Redis se ha convertido en la opción favorita para muchos desarrolladores y administradores por su facilidad de integración y el significativo aumento de rendimiento que ofrece. A continuación, desgranamos todo lo que necesitas saber para sacarle el máximo partido a Redis con Drupal, abarcando desde la instalación, configuración avanzada, ventajas e inconvenientes, hasta trucos de experto y consideraciones para todo tipo de servidores y alojamientos.

¿Qué es Redis y por qué es importante para Drupal?

Redis es una base de datos en memoria de tipo clave-valor, diseñada para ser extremadamente rápida. A diferencia de MySQL o sistemas similares, Redis almacena los datos directamente en la RAM, lo que permite lecturas y escrituras casi instantáneas. Esto es especialmente útil en sitios web dinámicos como los hechos con Drupal, donde la cache juega un papel vital para reducir la carga de la base de datos y acelerar la entrega de páginas.

Utilizar Redis en Drupal permite trasladar la cache de la base de datos a la memoria RAM, logrando una mejora de rendimiento real que en la práctica puede suponer entre un 25% y un 30% en la velocidad de carga. Además, reducirás la cantidad de acceso al disco duro y descongestionarás la base de datos, algo que se nota mucho cuando el tráfico aumenta o se manejan grandes volúmenes de contenido.

Ventajas y consideraciones clave antes de integrar Redis en Drupal

Antes de lanzarte a configurar Redis, ten en cuenta las siguientes cuestiones que te ahorrarán dolores de cabeza:

  • El almacenamiento en memoria RAM es efímero: Si el servidor se reinicia, los datos desaparecen. No uses Redis para datos sensibles o información que deba permanecer ante posibles apagados.
  • Mejora notable ante grandes volúmenes de tráfico: Redis es especialmente recomendable cuando tienes muchos usuarios concurrentes, editores o visitas, porque agiliza la gestión de cache y bloqueos.
  • No es apto para alojamientos compartidos económicos: Generalmente requiere acceso a la configuración del servidor, así que si usas hosting barato, puede que no tengas opción de instalarlo.

Instalando Redis y sus dependencias

El primer paso es instalar Redis en tu servidor, VPS o entorno local. Si utilizas una distribución basada en Debian o Ubuntu, el comando es sencillo:

sudo apt-get install redis-server

Si prefieres Docker o tienes necesidades más avanzadas, puedes buscar imágenes oficiales en Docker Hub.

Debes instalar un conector para PHP, que puede ser PhpRedis (la opción recomendada por rendimiento) o Predis (una alternativa en caso de no tener permisos de root en el servidor).

  • PhpRedis:

    sudo apt-get install php-redis

    Ventaja: Más rápido y eficiente, al ser una extensión nativa de PHP.

  • Predis:

    composer require predis/predis

    Ventaja: Se instala a nivel de aplicación, ideal para hostings sin acceso a la instalación de extensiones PHP.

Instalando el módulo Redis en Drupal

Para que Drupal pueda aprovechar Redis, necesitas instalar el módulo oficial disponible en Drupal.org. Aquí tienes el enlace al proyecto: Módulo Redis para Drupal.

composer require drupal/redis

Una vez descargado, actívalo desde la interfaz de administración de módulos en Drupal (Pestaña 'Extender' o 'Extend').

Configuración básica de Redis en Drupal

El núcleo de la configuración se encuentra en el archivo settings.php de Drupal (o en su variante settings.local.php para entornos locales/pruebas).

Dependiendo de si tu Redis se accede por TCP/IP o por socket Unix, el fragmento de configuración varía ligeramente:

  • Conexión por TCP/IP estándar:

    $settings['redis.connection']['interface'] = 'PhpRedis';
    $settings['redis.connection']['host'] = 'localhost';
    $settings['redis.connection']['port'] = '6379';
    $settings['cache']['default'] = 'cache.backend.redis';
    $settings['container_yamls'][] = 'sites/default/redis.services.yml';
  • Conexión por socket Unix (mejor rendimiento si tu hosting lo permite):

    $settings['redis.connection']['interface'] = 'Predis';
    $settings['redis.connection']['host'] = '/home/usuario/.redis/redis.sock';
    $settings['redis.connection']['port'] = NULL;
    $settings['cache']['default'] = 'cache.backend.redis';
    $settings['container_yamls'][] = 'sites/default/redis.services.yml';

    Recuerda sustituir usuario por el tuyo propio.

Si tu módulo de Redis está activo y la configuración es correcta, Drupal debería estar utilizando Redis para la cache. Puedes verificarlo en Informes > Redis en el backend de Drupal, donde aparecerá el estado de la conexión y estadísticas.

Configuración avanzada: integrando servicios y colas

El módulo Redis para Drupal permite mucho más que cambiar el backend de cache. Puedes personalizar qué tipo de información se almacena en Redis, como los datos de caché, la gestión de bloqueos (Lock API), la protección contra ataques de login (Flood API) o incluso las colas de Drupal.

Esto se gestiona copiando el archivo example.services.yml que viene con el módulo a la carpeta sites/default de tu sitio, renombrándolo como desees (redis.services.yml es una elección común). Dentro de este archivo, puedes decidir, línea a línea y según tus necesidades, qué servicios de Drupal se respaldarán en Redis.

Por ejemplo, si no deseas que la Lock API o Flood utilicen Redis, simplemente comenta las líneas correspondientes. Eso sí, ten cuidado al editar archivos YAML: nada de tabulaciones y respeta los niveles de indentación.

Limpieza de tablas de cache tras la integración

Tras la configuración inicial, es fundamental limpiar todas las tablas de cache de la base de datos para evitar que Drupal acceda a datos antiguos o inconsistentes tras el cambio de backend de cache. Puedes hacer esto con sentencias SQL como TRUNCATE en las tablas relevantes:

TRUNCATE `cachetags`;
TRUNCATE `cache_bootstrap`;
TRUNCATE `cache_config`;
TRUNCATE `cache_container`;
TRUNCATE `cache_data`;
TRUNCATE `cache_default`;
TRUNCATE `cache_discovery`;
TRUNCATE `cache_dynamic_page_cache`;
TRUNCATE `cache_entity`;
TRUNCATE `cache_menu`;
TRUNCATE `cache_render`;
TRUNCATE `semaphore`;
TRUNCATE `flood`;

Revisa si hay otras tablas de módulos personalizados o contribuidos y límpialas también para garantizar una transición limpia.

Configuraciones específicas para hostings y servidores

La forma de conectar Drupal con Redis puede variar según el tipo de servidor:

  • En VPS o servidores dedicados:
    Tienes total libertad para instalar Redis, modificar php.ini, y usar cualquier interfaz (PhpRedis o Predis). También puedes aprovechar conexiones persistentes y configuraciones avanzadas.
  • En hostings compartidos 'Turbo' o similares:
    Suele estar Redis preinstalado y debes conectarte a través de un socket Unix desde tu usuario.
  • En plataformas PaaS como Platform.sh:
    Dispones de configuraciones gestionadas tanto de servicios como de relaciones entre contenedores, configurando detalles en archivos de entorno y usando un settings.platformsh.php para incluir parámetros relativos a Redis.

Opciones de replicación y alta disponibilidad

Para sitios de mucho tráfico, usar varias instancias de Redis, con una primaria para escritura y réplicas para lectura, puede ser recomendable para mejorar el rendimiento y evitar sobrecarga en un solo servidor.

Esta configuración avanzada, principalmente soportada por la librería Predis, requiere especificar en settings.php los parámetros concretos de replicación:

$settings['redis.connection']['interface'] = 'Predis';
$settings['redis.connection']['replication'] = TRUE;
$settings['redis.connection']['replication.host'][1]['host'] = 'host-primario';
$settings['redis.connection']['replication.host'][1]['port'] = '6379';
$settings['redis.connection']['replication.host'][1]['role'] = 'primary';
$settings['redis.connection']['replication.host'][2]['host'] = 'host-replica-1';
$settings['redis.connection']['replication.host'][2]['port'] = '6379';
$settings['redis.connection']['replication.host'][2]['role'] = 'replica';
// Añadir más réplicas según tus necesidades

Esta funcionalidad está soportada únicamente por Predis, por lo que si buscas alta disponibilidad, selecciona el conector adecuado.

Solucionando el llenado de memoria en Redis

Un problema frecuente al usar Redis con Drupal es que la cache puede llenarse progresivamente debido al TTL -1, lo que provoca que los objetos almacenados nunca caduquen y Redis se sature.

Para evitarlo, es recomendable aplicar un parche comunitario al módulo Redis y establecer un TTL por defecto para los datos almacenados. Para ello:

  1. Instala el gestor de parches con Composer:

    composer require cweagans/composer-patches
  2. Añade en composer.json el parche recomendado:

    "patches": {
      "drupal/redis": {
        "Establecer TTL predeterminado para objetos permanentes": "https://www.drupal.org/files/issues/2020-09-23/redis-default_permanent_ttl-2944938.patch"
      }
    }
  3. Ejecuta composer install para aplicar el parche.
  4. Luego, en settings.php, especifica el TTL deseado, por ejemplo, para 14 días (1209600 segundos):

    $settings['redis.settings']['perm_ttl'] = 1209600; // 14 días

De esta manera, Redis eliminará los objetos con antigüedad superior al TTL establecido, evitando la saturación de memoria y manteniendo Drupal funcionando correctamente.

Configuración avanzada y personalización

Implementar Redis en Drupal permite gestionar otros aspectos avanzados como:

  • Prefijo para las claves de cache: para evitar conflictos si usas varios Drupal en Redis,
    $settings['cache_prefix'] = 'nombre-del-sitio';
  • Asignar Redis a bins de cache específicos: si solo quieres que ciertas partes de cache usen Redis,
    $settings['cache']['bins']['render'] = 'cache.backend.redis';
  • Colas de Drupal: configurar Redis como backend para colas o servicios específicos, como:
$settings['queue_default'] = 'queue.redis';
$settings['queue_default'] = 'queue.redis_reliable';
$settings['queue_service_aggregator_feeds'] = 'queue.redis';

Verificando que Redis funciona en Drupal

Para comprobar que Redis está operando correctamente en Drupal, te recomendamos:

  1. Entrar a Informe de estado y buscar la sección de Redis.
  2. Verificar que el estado indica "Conectado" y que se muestran estadísticas de uso y conexión.
  3. Si aparece "No conectado", revisa los parámetros de configuración y verifica que el servicio Redis esté en marcha.

Casos especiales y experiencia de uso real

Desarrolladores con experiencia en Drupal coinciden en que la diferencia de velocidad entre Redis y la cache estándar en MySQL es significativa, especialmente en sitios medianos o grandes con usuarios autenticados y mucho contenido. Aunque antes se usaba Memcache, Redis ofrece un rendimiento superior y mayor flexibilidad de configuración.

Es importante señalar que en alojamientos compartidos económicos probablemente no puedas acceder a Redis, aunque algunos proveedores avanzados lo incluyen en sus planes superiores.

Al implementar Redis en Drupal, consigues un salto cualitativo en rendimiento y escalabilidad. Si sigues las recomendaciones y ajustas la configuración a tus necesidades, tu web será más ágil, capaz de soportar más visitas y tareas complejas sin problemas. La flexibilidad de Redis te permitirá seguir creciendo y personalizando su uso según evoluciona tu proyecto Drupal.

Etiquetas

Comentarios