La caché de objetos es uno de los pilares del rendimiento en WordPress moderno. Object Cache Pro (OCP), el plugin comercial optimizado para Redis, reduce drásticamente consultas y latencias al guardar en memoria resultados de operaciones frecuentes. Sin embargo, cuando el back-end Redis se cae, se satura o queda inaccesible por red, el riesgo es claro: el propio WordPress puede ralentizarse o devolver errores si el plugin sigue intentando hablar con un servicio que no responde.
La solución pasa por un patrón sencillo y eficaz: fail-open. En lugar de “romper” el sitio cuando Redis no está disponible, se desactiva la caché de objetos de forma automática y WordPress continúa funcionando con su comportamiento por defecto (sin Redis), evitando caídas y mejorando la experiencia del usuario en situaciones de incidente.
A continuación se explica, en formato guía práctica, cómo integrar un fail-open simple directamente en wp-config.php, junto con una configuración comentada de Object Cache Pro. El objetivo: máxima resiliencia con el mínimo de complejidad.
wp-config.phpColoque este bloque antes de que WordPress cargue sus constantes definitivas y siempre antes de incluir el drop-in de caché. En la práctica, sitúelo por encima de otras constantes relacionadas con Redis/Cache y por debajo de las credenciales de base de datos para mantener el orden lógico.
/**
* Fail-open simple de Redis para Object Cache Pro
*/
$__fp = @fsockopen('127.0.0.1', 6379, $errno, $errstr, 0.2);
define('WP_REDIS_DISABLED', ! $__fp);
if ($__fp) {
fclose($__fp);
}
/**
* Object Cache Pro setup
*/
define('WP_REDIS_CONFIG', [
'token' => 'privatetoken',
'host' => '127.0.0.1',
'port' => 6379,
'username' => 'USERNAME',
'password' => 'PASSWORD',
'prefix' => 'yourownprefix-rcredis',
'database' => 11,
'timeout' => 0.5,
'read_timeout' => 0.5,
'retry_interval' => 10,
'retries' => 7,
'backoff' => 'smart',
'compression' => 'lzf',
'serializer' => 'igbinary',
'async_flush' => true,
'split_alloptions' => true,
'prefetch' => true,
'strict' => true,
'debug' => false,
'save_commands' => false,
]);
Lenguaje del código: PHP (php)
Qué hace: intenta abrir un socket TCP contra
127.0.0.1:6379con un timeout de 0,2 s. Si no puede, defineWP_REDIS_DISABLEDcomotrue. Object Cache Pro respeta esa constante: no se inicializa y WordPress sigue su ejecución sin la caché de objetos externa.
fsockopen() con timeout de 0,2 s (200 ms) evita que la pila PHP/WordPress desperdicie segundos valiosos intentando reconectar. En producción de alto tráfico, esos segundos se multiplican y saturan recursos.wp-config.php decide en tiempo de arranque.wp-config.phpobject-cache.php) y antes de otras constantes de Redis.wp-config.local.php), mantenga el sondeo en el archivo más cercano al servidor para reflejar el estado real de la instancia Redis.127.0.0.1:6379. Adáptelo:
redis:6379) o la IP del pod/servicio.stream_socket_client('unix:///ruta/al/socket', ...)) o exponga también un puerto local para healthcheck.timeout de OCP ('timeout' => 0.5 y 'read_timeout' => 0.5) complementan el sondeo. Manténgalos cortos para evitar procesos PHP bloqueados.token, username y password en repositorios. Use variables de entorno inyectadas por el orquestador y constrúyalas en PHP: 'username' => getenv('WP_REDIS_USER') ?: null, 'password' => getenv('WP_REDIS_PASS') ?: null, 'token' => getenv('OCP_TOKEN') ?: null,database distinto por entorno (p. ej., 11 en producción, 12 en staging) para evitar colisiones.prefix debe ser único por sitio/entorno (incluya el dominio o un hash).wp_) y documente su convención.lzf y igbinary son elecciones populares: buen equilibrio entre CPU y Tamaño.'retries' => 7, 'retry_interval' => 10 y 'backoff' => 'smart', OCP gestiona reconexiones de forma educada. Aun así, el fail-open evita que estos reintentos bloqueen el arranque en un incidente grave.'strict' => true ayuda a detectar misuse de la caché (tipo de datos, claves). Manténgalo activado en producción si sus desarrollos están probados.'split_alloptions' => true mitiga el clásico “alloptions bloat”, separando entradas grandes. Útil en sitios con muchos plugins que sobrecargan opciones.'async_flush' => true agiliza vaciados (flush) sin bloquear peticiones. No abuse de los flush() masivos; programe purgas selectivas.debug está en true en entornos controlados). Útil en staging para ver si la caché está activa.gets/hits/misses (por CLI o herramientas de APM) para comprobar el impacto cuando Redis está activo frente a desactivado.redis-cli PING) y alerte cuando falle. El sitio no caerá, pero sabrá que está degradado.Si fsockopen('127.0.0.1', 6379) siempre da positivo pero el tráfico real va por otro host (p. ej., redis-service en Kubernetes), el sondeo puede engañar. Alinee el host del sondeo con el mismo endpoint que usa OCP:
$redisHost = getenv('WP_REDIS_HOST') ?: '127.0.0.1';
$redisPort = (int) (getenv('WP_REDIS_PORT') ?: 6379);
$__fp = @fsockopen($redisHost, $redisPort, $errno, $errstr, 0.2);
define('WP_REDIS_DISABLED', ! $__fp);
if ($__fp) { fclose($__fp); }
define('WP_REDIS_CONFIG', [
'host' => $redisHost,
'port' => $redisPort,
// ... resto de opciones
]);
Lenguaje del código: PHP (php)
Si su Redis escucha en /var/run/redis/redis.sock y no expone TCP:
$socket = 'unix:///var/run/redis/redis.sock';
$__fp = @stream_socket_client($socket, $errno, $errstr, 0.2);
define('WP_REDIS_DISABLED', ! $__fp);
if ($__fp) { fclose($__fp); }
define('WP_REDIS_CONFIG', [
'host' => null,
'port' => null,
'path' => '/var/run/redis/redis.sock',
// ...
]);
Lenguaje del código: PHP (php)
Nota: compruebe permisos del socket (usuario de PHP-FPM) y políticas SELinux/AppArmor.
En entornos con varios pods o workers, algunos procesos pueden evaluar el sondeo como true y otros como false durante una transición. Es normal que convivan nodos con caché y nodos sin caché por unos minutos; use sesiones sin estado y evite dependencias fuertes de la caché para lógica crítica.
¿El fail-open impacta al SEO o al usuario final?
Cuando Redis cae, el sitio no se rompe: solo pierde la aceleración de la caché de objetos. Los usuarios pueden notar ligero aumento de latencia, pero no errores. Para SEO es mucho mejor degradar el rendimiento que devolver 5xx.
¿Puedo combinar este enfoque con Page Cache/CDN?
Sí. La caché de objetos acelera PHP y consultas; la caché de página y la CDN reducen peticiones al origen. Si Redis falla, su CDN seguirá sirviendo contenido cacheado y el impacto real será menor.
¿Es seguro dejar credenciales en wp-config.php?
Es habitual, pero se recomienda variables de entorno y restringir permisos del archivo (0400/0440). Nunca suba wp-config.php con secretos a repositorios públicos.
¿Cómo saber si Object Cache Pro está activo en producción?
Use herramientas de APM, metrics endpoints del entorno, o habilite debug => true solo en staging para inspeccionar cabeceras/logs. También puede contrastar contadores en Redis (INFO, MONITOR en entornos controlados).
Integrar un fail-open de Redis en wp-config.php es una mejora pequeña de código con un enorme retorno operativo: evita caídas ante incidencias de red o mantenimiento del clúster, y mantiene WordPress funcionando con dignidad mientras el equipo corrige la causa raíz. Combinado con timeouts cortos, backoff inteligente y una configuración prudente de Object Cache Pro, su sitio gana resiliencia, previsibilidad y tranquilidad en los momentos críticos.
