La caché es el secreto de los sitios web rápidos. En lugar de procesar la misma petición mil veces, la guardas en memoria y la sirves instantáneamente.
Un VPS sin caché bien configurada está desperdiciando recursos. Con caché, el mismo servidor puede manejar 10x más tráfico.
Esta guía te explica los tres sistemas de caché más importantes y cómo configurarlos.
Por qué la caché es esencial
Sin caché
- Usuario pide página
- PHP procesa el código
- MySQL ejecuta queries
- PHP genera HTML
- Nginx envía respuesta
- Tiempo: 500ms - 2s
Con caché
- Usuario pide página
- Caché tiene la respuesta guardada
- Nginx envía respuesta
- Tiempo: 10-50ms
La diferencia es brutal. Y se multiplica con cada usuario concurrente.
Tipos de caché en un VPS
| Tipo | Qué cachea | Herramienta |
|---|---|---|
| OPcache | Código PHP compilado | OPcache (integrado) |
| Object cache | Datos de BD, objetos | Redis, Memcached |
| Page cache | Páginas HTML completas | Nginx, Varnish, plugins |
| CDN | Assets estáticos | Cloudflare, BunnyCDN |
Las capas de caché
La caché funciona mejor en capas. Cada capa intercepta peticiones antes de que lleguen más abajo:
- CDN - Archivos estáticos (JS, CSS, imágenes)
- Page cache - Páginas HTML completas
- Object cache - Resultados de queries, objetos
- OPcache - Bytecode PHP compilado
- Query cache - Queries SQL (deprecated en MySQL 8)
Cuanto más arriba interceptes, más rápido respondes.
OPcache: obligatorio para PHP
OPcache guarda el código PHP compilado en memoria. Sin OPcache, PHP recompila cada archivo en cada petición. Con OPcache, lo hace una vez.
Verificar si está activo
php -m | grep OPcache
Activar OPcache
En /etc/php/8.3/fpm/conf.d/10-opcache.ini:
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=0
opcache.fast_shutdown=1
opcache.save_comments=1
Configuración explicada
| Parámetro | Valor | Explicación |
|---|---|---|
memory_consumption | 256 | MB de RAM para scripts |
max_accelerated_files | 10000 | Máximo de archivos en caché |
revalidate_freq | 0 | Verificar cambios cada X segundos (0 = siempre) |
interned_strings_buffer | 16 | MB para strings internos |
Para producción
En producción, puedes aumentar revalidate_freq a 60 o más. Los archivos no cambian constantemente.
opcache.revalidate_freq=60
opcache.validate_timestamps=0 # Solo en producción estable
Verificar uso
php -r "print_r(opcache_get_status());"
O instala un panel como opcache-gui.
Redis: el estándar moderno
Redis es una base de datos en memoria que funciona como caché. Es rápida, versátil y el estándar actual.
Instalar Redis
sudo apt update
sudo apt install redis-server -y
sudo systemctl enable redis-server
sudo systemctl start redis-server
Verificar instalación
redis-cli ping
# Respuesta: PONG
Configuración básica
Edita /etc/redis/redis.conf:
# Memoria máxima
maxmemory 512mb
# Política cuando se llena (elimina menos usados)
maxmemory-policy allkeys-lru
# Solo conexiones locales
bind 127.0.0.1
# Persistencia (opcional, para caché pura desactívalo)
save ""
Reinicia:
sudo systemctl restart redis-server
Usar Redis como object cache
Para WordPress:
- Instala plugin “Redis Object Cache”
- Añade a
wp-config.php:
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);
- Activa en el plugin
Para Laravel:
En .env:
CACHE_DRIVER=redis
SESSION_DRIVER=redis
Para cualquier PHP:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// Guardar
$redis->set('clave', 'valor', 3600); // TTL 1 hora
// Recuperar
$valor = $redis->get('clave');
Comandos útiles de Redis
# Ver claves
redis-cli KEYS "*"
# Ver memoria usada
redis-cli INFO memory
# Limpiar toda la caché
redis-cli FLUSHALL
# Ver estadísticas
redis-cli INFO stats
Memcached: simple y ligero
Memcached es más simple que Redis. Solo almacena pares clave-valor en memoria. Sin persistencia, sin estructuras de datos complejas.
Instalar Memcached
sudo apt install memcached libmemcached-tools -y
sudo systemctl enable memcached
sudo systemctl start memcached
Configuración
Edita /etc/memcached.conf:
# Memoria máxima en MB
-m 512
# Puerto
-p 11211
# Solo local
-l 127.0.0.1
# Conexiones máximas
-c 2048
PHP con Memcached
Instala la extensión:
sudo apt install php8.3-memcached -y
sudo systemctl restart php8.3-fpm
Uso:
$memcached = new Memcached();
$memcached->addServer('127.0.0.1', 11211);
// Guardar
$memcached->set('clave', 'valor', 3600);
// Recuperar
$valor = $memcached->get('clave');
Redis vs Memcached
Comparativa directa
| Característica | Redis | Memcached |
|---|---|---|
| Estructuras de datos | Strings, listas, sets, hashes, streams | Solo strings |
| Persistencia | Sí (opcional) | No |
| Replicación | Sí | No nativo |
| Pub/Sub | Sí | No |
| Memoria | Más eficiente | Menos eficiente |
| Multithreading | Single-thread | Multi-thread |
| Complejidad | Mayor | Menor |
Cuándo usar cada uno
Usa Redis si:
- Necesitas persistencia de datos
- Quieres estructuras de datos (listas, sets)
- Usas WordPress, Laravel o frameworks modernos
- Necesitas colas de trabajo
- Quieres una sola herramienta para todo
Usa Memcached si:
- Solo necesitas caché simple key-value
- Tienes un caso de uso muy específico
- Ya lo usas y funciona bien
Nuestra recomendación: Redis en el 95% de casos. Es más versátil y la diferencia de recursos es mínima.
Page cache con Nginx
Para páginas que no cambian frecuentemente, cachear el HTML completo es lo más efectivo.
FastCGI Cache para PHP
Añade a tu configuración de Nginx:
# Fuera del bloque server
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
server {
# ... tu configuración ...
set $skip_cache 0;
# No cachear admin, login, etc.
if ($request_uri ~* "/wp-admin/|/wp-login.php") {
set $skip_cache 1;
}
# No cachear si hay cookies de login
if ($http_cookie ~* "wordpress_logged_in") {
set $skip_cache 1;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 60m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-Cache-Status $upstream_cache_status;
}
}
Verificar que funciona
curl -I https://tudominio.com/
# Busca: X-Cache-Status: HIT
Varnish: caché HTTP profesional
Varnish es un acelerador HTTP que se pone delante de tu servidor web. Para sitios con mucho tráfico.
Instalar Varnish
sudo apt install varnish -y
Configuración básica
Varnish escucha en el puerto 80, Nginx en el 8080:
- Cambia Nginx a puerto 8080
- Configura Varnish para pasar tráfico a Nginx
/etc/varnish/default.vcl:
vcl 4.0;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_recv {
# No cachear admin
if (req.url ~ "^/wp-admin" || req.url ~ "^/wp-login") {
return (pass);
}
}
sub vcl_backend_response {
# Cachear 1 hora
set beresp.ttl = 1h;
}
Varnish es potente pero complejo. Solo recomendado si FastCGI cache no es suficiente.
Caché para WordPress específico
WordPress tiene plugins que simplifican todo:
LiteSpeed Cache (si usas LiteSpeed)
El mejor plugin de caché para WordPress. Gratuito, potente, integrado con servidor LiteSpeed.
Los VPS de Avantys con LiteSpeed incluyen esta ventaja.
WP Super Cache / W3 Total Cache
Para servidores Nginx/Apache. Generan archivos HTML estáticos.
Redis Object Cache
Conecta WordPress con Redis para object cache. Complementa a los plugins de page cache.
Configuración recomendada WordPress
- OPcache: Siempre activo
- Redis: Object cache con plugin
- Page cache: LiteSpeed Cache o WP Super Cache
- CDN: Cloudflare (gratis)
Con esto, un WordPress típico pasa de 2s a 200ms de carga.
Cuánta memoria asignar
La memoria de caché compite con PHP, MySQL y el sistema. Distribuye con cabeza:
VPS 4GB RAM
| Componente | RAM |
|---|---|
| Sistema | 500MB |
| MySQL buffer | 1GB |
| PHP-FPM | 1GB |
| Redis | 512MB |
| OPcache | 256MB |
| Libre | ~700MB |
VPS 8GB RAM
| Componente | RAM |
|---|---|
| Sistema | 500MB |
| MySQL buffer | 2GB |
| PHP-FPM | 2GB |
| Redis | 1GB |
| OPcache | 512MB |
| Libre | ~2GB |
Monitorizar la caché
Redis
# Estadísticas
redis-cli INFO stats
# Tasa de aciertos
redis-cli INFO stats | grep hit
Busca keyspace_hits vs keyspace_misses. Un ratio alto de hits es bueno.
OPcache
<?php
print_r(opcache_get_status());
Busca opcache_hit_rate. Debería ser >95%.
Nginx FastCGI
Revisa el header X-Cache-Status:
- HIT: Servido desde caché
- MISS: Generado y cacheado
- BYPASS: No cacheado (admin, login)
Errores comunes
Error 1: Caché de sesiones sin Redis
Las sesiones PHP por defecto van a disco. Con Redis van a memoria:
; php.ini
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
Error 2: No invalidar caché
Si cambias contenido y la caché no se actualiza, tus usuarios ven contenido antiguo. Configura TTLs apropiados y mecanismos de purga.
Error 3: Demasiada memoria a caché
Si Redis usa 2GB en un VPS de 4GB, no queda memoria para PHP y MySQL. La caché debe complementar, no dominar.
Error 4: Cachear contenido dinámico
No cachees páginas de carrito, checkout, áreas de usuario. Cada usuario vería los datos de otro.
Preguntas frecuentes
¿Redis consume mucha CPU?
No, es muy eficiente. Consume más memoria que CPU.
¿Puedo usar Redis y Memcached juntos?
Técnicamente sí, pero no tiene sentido. Elige uno.
¿La caché puede causar problemas?
Sí, si no invalidas correctamente. Contenido desactualizado, datos de otros usuarios… Configura bien los TTLs.
¿OPcache es suficiente?
Para sitios pequeños sí. Para tráfico medio-alto, añade Redis y page cache.
Nuestra recomendación
Mínimo obligatorio:
- OPcache activado (mejora inmediata del 50%+)
Para la mayoría de sitios:
- OPcache + Redis + page cache
Para alto tráfico:
- Todo lo anterior + CDN + Varnish si es necesario
Con la caché bien configurada, tu VPS rinde como uno de doble precio.
¿Quieres un VPS con caché optimizada? Explora los VPS de Avantys con LiteSpeed y configuración profesional.
Conclusión
La caché es la optimización de mayor impacto que puedes hacer en tu VPS. OPcache es obligatorio, Redis es el estándar para object cache, y page cache multiplica la capacidad de tu servidor.
Empieza por OPcache (gratuito, integrado). Añade Redis cuando necesites más. Implementa page cache para el salto definitivo.
Tu servidor te lo agradecerá. Tus usuarios también.
Guías relacionadas
- Optimizar el rendimiento de tu VPS
- Mejor VPS para WordPress
- Monitorizar tu VPS con Netdata
- Nginx vs Apache en VPS
¿Quieres la guía completa con todos los casos de uso?
¿Quieres que lo hagamos por ti?
En Avantys gestionamos tu web, hosting y crecimiento digital de punta a punta. Tú a lo importante.