Redis

Integra Drupal con el almacén de clave-valor Redis, proporcionando backends de caché, bloqueo, flood y cola para mejorar el rendimiento.

redis
58,348 sites
103
drupal.org

Install

Drupal 11, 10, 9 v8.x-1.11
composer require 'drupal/redis:8.x-1.11'

Overview

El módulo Redis proporciona una integración completa entre Drupal y el almacén de clave-valor Redis (así como alternativas compatibles como Valkey). Ofrece alternativas de alto rendimiento a los servicios predeterminados de Drupal respaldados por base de datos, aprovechando el almacén de estructuras de datos en memoria de Redis.

El módulo soporta tres bibliotecas cliente de Redis diferentes: PhpRedis (extensión PHP), Predis (biblioteca PHP pura) y Relay (extensión PHP con caché en memoria). Selecciona automáticamente el primer cliente disponible según la prioridad, aunque se puede configurar explícitamente un cliente específico.

Las características principales incluyen un backend de caché basado en Redis con soporte para etiquetas de caché, compresión de datos y configuración de TTL ajustable; un backend de bloqueo distribuido para sincronizar el acceso a recursos entre múltiples servidores web; un backend de flood para limitación de velocidad y protección contra fuerza bruta; e implementaciones de cola tanto básicas como confiables para el procesamiento de tareas en segundo plano.

El módulo también proporciona un informe administrativo detallado que muestra el estado de conexión de Redis, uso de memoria, estadísticas de caché por bin, invalidaciones de etiquetas de caché y análisis de caché de renderizado para ayudar a identificar cuellos de botella de rendimiento.

Features

  • Backend de caché Redis con soporte completo para invalidación de etiquetas de caché y seguimiento automático de checksums
  • Compresión gzip opcional para datos en caché para reducir el uso de memoria (umbral y nivel configurables)
  • Soporte para tres bibliotecas cliente de Redis: PhpRedis, Predis y Relay con selección automática
  • Backend de bloqueo distribuido para entornos multi-servidor que soporta tanto bloqueos regulares como persistentes
  • Backend de protección contra flood para limitar intentos de inicio de sesión y otra protección contra fuerza bruta
  • Backend de cola básico para procesamiento de tareas en segundo plano con soporte de tiempo de arrendamiento
  • Backend de cola confiable que implementa ReliableQueueInterface para entrega garantizada
  • Informe administrativo que muestra el estado de Redis, uso de memoria, clientes conectados, claves por bin de caché y estadísticas de etiquetas de caché
  • Soporte para modo de alta disponibilidad Redis Sentinel con configuración maestro/esclavo
  • Soporte para replicación de Redis con configuración primario/réplica (Predis)
  • Prefijo de caché configurable para entornos multi-sitio que comparten una única instancia de Redis
  • TTL permanente configurable por bin de caché con soporte para intervalos legibles por humanos
  • Soporte de caché de contenedor bootstrap para usar Redis antes de que Drupal esté completamente inicializado
  • Soporte de caché en memoria con Relay para rendimiento similar a ChainedFastBackend
  • Soporte para serialización igbinary para almacenamiento optimizado y velocidad de deserialización

Use Cases

Cacheo de sitio web de alto tráfico

Reemplazar la caché respaldada por base de datos con Redis para un rendimiento significativamente mejorado en sitios de alto tráfico. El almacenamiento en memoria de Redis proporciona lecturas de caché de sub-milisegundos comparadas con consultas a base de datos. Configurar con: $settings['cache']['default'] = 'cache.backend.redis' e incluir example.services.yml para soporte de invalidación de etiquetas de caché.

Entorno multi-servidor con balanceo de carga

Usar Redis como un backend de caché compartido entre múltiples servidores web detrás de un balanceador de carga. Todos los servidores se conectan a la misma instancia de Redis, asegurando consistencia de caché. El backend de bloqueo distribuido previene condiciones de carrera cuando múltiples servidores intentan reconstruir cachés simultáneamente.

Protección contra fuerza bruta en inicio de sesión a escala

Reemplazar el backend de flood de base de datos con Redis para limitación de velocidad eficiente. Las operaciones de incremento atómico de Redis y la expiración basada en TTL manejan altos volúmenes de intentos de autenticación sin carga de base de datos. Configurar en example.services.yml o services.yml personalizado.

Procesamiento de trabajos en segundo plano con colas confiables

Usar colas confiables de Redis para procesamiento en segundo plano de misión crítica donde la pérdida de trabajos es inaceptable. La cola confiable rastrea elementos reclamados y los libera automáticamente si el worker falla. Configurar con: $settings['queue_default'] = 'queue.redis_reliable'.

Optimización de caché de renderizado con compresión

Habilitar compresión gzip para entradas grandes de caché de renderizado para reducir el uso de memoria de Redis. Establecer $settings['redis_compress_length'] = 100 para comprimir entradas mayores a 100 bytes. Particularmente efectivo para bins de caché de página y renderizado con fragmentos HTML grandes.

Instalación multi-sitio con Redis compartido

Ejecutar múltiples sitios Drupal en infraestructura compartida usando una única instancia de Redis. Configurar prefijos de caché únicos por sitio: $settings['cache_prefix'] = 'site1_' para prevenir colisiones de claves mientras se comparten los recursos del servidor Redis.

Alta disponibilidad de Redis con Sentinel

Configurar Redis Sentinel para failover automático en entornos de producción. Establecer hosts sentinel como un array y especificar el nombre de instancia: $settings['redis.connection']['host'] = ['sentinel1:5000','sentinel2:5000'] y $settings['redis.connection']['instance'] = 'mymaster'.

Rendimiento máximo con Relay

Usar la extensión PHP Relay para ganancias adicionales de rendimiento a través de su caché en memoria incorporada, similar a ChainedFastBackend pero más eficiente. Configurar bins específicos para usar la caché de memoria de Relay: $settings['redis_relay_memory_bins'] = ['container', 'bootstrap', 'config', 'discovery'].

Tips

  • Usar política de desalojo volatile-lfu para un comportamiento óptimo de desalojo de caché - desaloja elementos menos frecuentemente usados con TTL mientras protege etiquetas de caché
  • Habilitar compresión con $settings['redis_compress_length'] = 100 para reducir significativamente el uso de memoria para cachés con mucho texto
  • Establecer $settings['redis_invalidate_all_as_delete'] = TRUE para rendimiento mejorado evitando verificaciones de invalidación dual
  • Configurar TTLs permanentes específicos para bins de caché grandes como page y render para ayudar a Redis a gestionar memoria: $settings['redis_perm_ttl_page'] = '3 days'
  • Usar el informe de Redis en /admin/reports/redis para identificar entradas de caché de renderizado con variaciones excesivas - estas indican contextos de caché faltantes
  • Cuando se usa Relay, omitir ChainedFastBackend para los bins config, discovery y bootstrap ya que Relay proporciona su propio cacheo en memoria eficiente
  • Establecer redis_ttl_offset para habilitar recuperación de elementos de caché expirados mientras aún permite que Redis eventualmente desaloje elementos antiguos
  • Almacenar datos persistentes como colas en una instancia de Redis separada con persistencia AOF habilitada para prevenir pérdida de datos
  • Monitorear conteos de invalidación de etiquetas de caché en el informe - conteos altos para etiquetas específicas pueden indicar patrones de invalidación ineficientes
  • Para entornos de desarrollo usando DDEV, instalar el add-on ddev-redis y anular host a 'redis' en settings.php

Technical Details

Admin Pages 1
Redis /admin/reports/redis

Muestra estadísticas completas de uso de Redis y estado de conexión. Muestra advertencias sobre problemas de configuración, conteos de invalidación de etiquetas de caché, información de clientes conectados, versión y modo de Redis, número de claves almacenadas, uso de memoria con política de desalojo, tiempo de actividad del servidor, estadísticas de lectura/escritura, desglose de claves por bin de caché, entradas de caché de renderizado con más variaciones, y etiquetas de caché más invalidadas.

Permissions 1
Acceder al Informe de Redis

Permite a los usuarios ver el informe de estadísticas y estado de Redis en /admin/reports/redis

Hooks 2
hook_help

Proporciona texto de ayuda para el módulo Redis mostrando el estado actual de conexión del cliente.

hook_requirements

Verifica el estado de conexión de Redis durante el tiempo de ejecución y lo reporta en la página de informe de estado.

Troubleshooting 8
Redis no se usa a pesar de la configuración

Asegurar que el servidor Redis esté ejecutándose y accesible. Verificar el informe de estado en /admin/reports/redis o ejecutar 'drush status-report' para verificar la conexión. Asegurar que redis.services.yml esté incluido en settings.php. Verificar que la extensión PHP (phpredis) o biblioteca (predis) esté instalada y disponible.

Las entradas de caché crecen indefinidamente, Redis se queda sin memoria

Configurar una política de desalojo apropiada en Redis: 'maxmemory-policy volatile-lfu' es recomendada. Establecer un límite de maxmemory. El módulo establece TTL en todas las entradas de caché, haciendo efectivas las políticas de desalojo volatile. Evitar la política 'noeviction' ya que causará errores cuando la memoria esté llena.

La caché no se limpia al ejecutar drush cache:rebuild

El comando drush cr no vacía el almacenamiento de Redis por diseño - solo invalida cachés. Los elementos permanecen en Redis hasta la expiración del TTL o desalojo. Para limpiar Redis manualmente: 'redis-cli flushall' o vía Drush: drush php:eval "\Drupal::service('redis.factory')->getClient()->flushAll()"

No se encuentran etiquetas de caché en el informe, la invalidación de etiquetas no funciona

Asegurar que el servicio de checksum de etiquetas de caché esté anulado en example.services.yml o services.yml personalizado. El servicio 'cache_tags.invalidator.checksum' debe usar la clase RedisCacheTagsChecksum. Incluir: $settings['container_yamls'][] = 'modules/contrib/redis/example.services.yml'

Errores de conexión Redis con Redis gestionado de Azure/AWS

Los servicios Redis gestionados pueden deshabilitar el comando CONFIG por seguridad. Las versiones recientes del módulo manejan esto correctamente. Actualizar a la última versión. Algunas estadísticas en el informe pueden no estar disponibles sin acceso a CONFIG.

Conflictos de bloqueo o condiciones de carrera en entorno multi-servidor

Reemplazar el servicio de lock predeterminado con el backend de lock Redis incluyendo example.services.yml. Esto proporciona bloqueo distribuido entre todos los servidores web. Asegurar que todos los servidores se conecten a la misma instancia de Redis.

Elementos de cola perdidos después de reinicio de Redis

Por defecto, Redis no persiste datos (o usa snapshots RDB que pueden perder datos recientes). Para colas confiables, configurar persistencia AOF de Redis o usar una instancia de Redis persistente separada para colas. Considerar usar la cola de base de datos para datos verdaderamente críticos.

Rendimiento lento a pesar de usar Redis

Verificar si maxmemory de Redis está establecido muy bajo causando desalojos frecuentes. Usar 'redis-cli INFO' para verificar uso de memoria. Considerar habilitar compresión para entradas de caché grandes. Para usuarios de Relay, verificar que la caché en memoria esté habilitada para los bins apropiados. Verificar latencia de red si Redis está en un servidor remoto.

Security Notes 8
  • Restringir acceso a la página de informe de Redis usando el permiso 'access redis report' - expone información de estructura de caché
  • Configurar Redis para enlazar solo a localhost o interfaces de red internas, nunca exponer Redis directamente a internet
  • Usar autenticación de Redis (requirepass) para cualquier instancia de Redis accesible desde múltiples máquinas
  • Cuando se usa replicación de Redis, asegurar que todas las conexiones usen autenticación
  • Los datos de caché pueden contener información sensible - asegurar que el acceso a Redis esté correctamente asegurado a nivel de red
  • El backend de flood almacena direcciones IP - asegurar que los controles de acceso a Redis cumplan con los requisitos de privacidad
  • Considerar encriptación de red (TLS/SSL) para conexiones Redis sobre redes no confiables
  • Nunca almacenar secretos sin encriptar en colas Redis - usar encriptación para datos sensibles de trabajos