El caché almacena copias de datos en una capa de almacenamiento más rápida para que las solicitudes repetidas se sirvan sin acceder al origen — reduciendo la latencia, la carga del backend y los costos de infraestructura.
Resumen El caché es la práctica de almacenar una copia de datos en una capa de almacenamiento rápida y temporal (el caché) para que las solicitudes futuras puedan responderse sin repetir el cálculo original o la consulta a la base de datos. Un cache hit devuelve datos instantáneamente desde el caché. Un cache miss accede al origen y almacena el resultado para uso futuro. El caché reduce los tiempos de respuesta de cientos de milisegundos a menos de 10 milisegundos para solicitudes repetidas. Cada capa de la web moderna usa caché: CPUs, navegadores, servidores de aplicaciones, bases de datos, CDNs y redes distribuidas.
¿Qué es el caché?
El caché consiste en almacenar una copia reutilizable de datos en una capa de almacenamiento más rápida para que las solicitudes posteriores de los mismos datos puedan servirse sin repetir la obtención o el cálculo original.
La mecánica fundamental:
- Cache hit — Los datos solicitados se encuentran en el caché. Se devuelven inmediatamente, sin necesidad de solicitar al origen.
- Cache miss — Los datos solicitados no están en el caché. El sistema los obtiene del origen, los almacena en caché y los devuelve.
- TTL (Time To Live) — La duración durante la cual un elemento en caché se considera válido antes de que deba actualizarse.
- Eviction — Cuando el caché está lleno, los elementos antiguos o menos usados se eliminan para hacer espacio. Políticas comunes: LRU (Least Recently Used), LFU (Least Frequently Used), FIFO (First In First Out).
Tipos de caché
El caché ocurre en cada capa del stack tecnológico:
| Capa de caché | Dónde opera | Qué almacena | Latencia típica |
|---|---|---|---|
| Caché de CPU (L1/L2/L3) | Dentro del procesador | Instrucciones y datos de la RAM | < 1 nanosegundo |
| Caché del navegador | Dispositivo del usuario | HTML, CSS, JavaScript, imágenes | 0 ms (disco local) |
| Caché de aplicación | Memoria del servidor de aplicaciones | Resultados calculados, datos de sesión | < 1 ms |
| Caché de consultas de base de datos | Capa de base de datos | Conjuntos de resultados de consultas | < 5 ms |
| Caché CDN / distribuido | Nodos de red distribuidos | Contenido web estático y dinámico | < 10 ms (PoP más cercano) |
| Caché DNS | Resolver y SO | Mapeos dominio-a-IP | < 1 ms (después del primer lookup) |
Estrategias de caché
| Estrategia | Cómo funciona | Mejor para | Riesgo |
|---|---|---|---|
| Cache-aside (carga perezosa) | La app verifica el caché primero; si hay miss, carga del origen y pobla el caché | Cargas de trabajo de lectura intensa | Arranque en frío inicial |
| Write-through | Cada escritura va al caché y al origen simultáneamente | Datos críticos de consistencia | Escrituras más lentas |
| Write-back (write-behind) | Las escrituras van primero al caché; el origen se actualiza de forma asíncrona | Alta capacidad de escritura | Pérdida de datos si falla el caché |
| Read-through | El caché gestiona la obtención de forma transparente; la app solo habla con el caché | Simplificar la lógica de la app | Dependencia de librería de caché |
| Stale-while-revalidate | Sirve contenido en caché obsoleto inmediatamente; actualiza en segundo plano | Rendimiento web, CDN | Obsolescencia breve aceptable |
Cabeceras HTTP de caché
El caché de CDN y navegador se controla mediante cabeceras HTTP:
| Cabecera | Significado |
|---|---|
Cache-Control: max-age=3600 | Almacena en caché esta respuesta durante 3600 segundos (1 hora) |
Cache-Control: no-store | Nunca almacenar esta respuesta en ningún lugar |
Cache-Control: no-cache | Almacenarla en caché, pero revalidar con el origen antes de servir |
Cache-Control: public | La respuesta puede ser almacenada en cachés compartidos (CDNs, proxies) |
Cache-Control: private | Solo el navegador del usuario final puede almacenarla en caché |
ETag | Identificador único para una versión de un recurso; habilita solicitudes condicionales |
Vary | Indica a los cachés que almacenen versiones separadas según las cabeceras especificadas (p. ej., Vary: Accept-Encoding) |
Invalidación del caché
La invalidación del caché es el proceso de eliminar o actualizar datos en caché antes de que expire su TTL. Es uno de los problemas más difíciles en los sistemas distribuidos.
Métodos:
- Purge — Eliminar explícitamente una URL o clave específica del caché.
- Invalidación basada en etiquetas — Agrupar entradas de caché por etiqueta y purgar todas las entradas que comparten una etiqueta a la vez.
- URLs versionadas — Incrustar un hash de versión en las URLs de assets (p. ej.,
style.abc123.css); nueva versión = nueva URL = cache miss automático. - Surrogate keys — Usadas por CDNs para invalidar grupos de objetos relacionados con una sola llamada a la API.
Errores comunes de caché
| Error | Consecuencia | Solución |
|---|---|---|
Almacenar en caché respuestas personalizadas sin Vary | El usuario A recibe los datos privados del usuario B | Añade Vary: Cookie o evita cachear respuestas privadas |
| TTL establecido arbitrariamente alto | Contenido obsoleto mostrado a usuarios tras actualizaciones | Establece el TTL según la frecuencia real de cambios de los datos |
| Sin plan de invalidación | Errores y contenido desactualizado persisten indefinidamente | Implementa endpoints de purga o URLs versionadas |
| Almacenar en caché respuestas de error (500) | Respuestas de error servidas desde caché durante horas | Excluye explícitamente los códigos de estado no 2xx del caché |
| Cache stampede al expirar | Pico de solicitudes al origen cuando un elemento popular expira simultáneamente | Usa stale-while-revalidate o request coalescing |
Preguntas frecuentes
¿Qué es el caché en términos simples? El caché almacena una copia de los datos en un lugar más rápido para que los mismos datos puedan devolverse rápidamente la próxima vez sin volver a obtenerlos de la fuente original.
¿Qué es un cache hit vs un cache miss? Un cache hit significa que los datos solicitados se encontraron en el caché y se devolvieron inmediatamente. Un cache miss significa que los datos no estaban en el caché — el sistema tuvo que obtenerlos de la fuente original, lo que tarda más.
¿Qué es el TTL en caché? El TTL (Time To Live) es el número de segundos que un elemento en caché se considera válido. Un TTL de 3600 significa que el elemento está en caché durante 1 hora. Cuando el TTL expira, la siguiente solicitud desencadena una nueva obtención del origen.
¿Es una CDN lo mismo que el caché? No. Una CDN (Red de Distribución de Contenido) es una red distribuida de servidores. El caché es una de las técnicas que usan las CDNs. El caché también ocurre en navegadores, aplicaciones, bases de datos y otras capas completamente separadas de las CDNs.
¿Qué es la invalidación del caché y por qué es difícil? La invalidación del caché significa eliminar o actualizar datos en caché antes de que expire su TTL. Es difícil porque en los sistemas distribuidos, los mismos datos están en caché en múltiples lugares simultáneamente — una entrada de caché puede necesitar invalidarse en cientos de nodos de una red distribuida, múltiples cachés de navegador y cachés de nivel de aplicación a la vez.
¿Cómo funciona el caché del navegador? Los navegadores almacenan en caché los assets (imágenes, CSS, JavaScript) basándose en las cabeceras de respuesta HTTP. La cabecera Cache-Control: max-age le dice al navegador cuánto tiempo conservar el archivo. Cuando el TTL expira, el navegador solicita una versión actualizada al servidor.
¿Qué es stale-while-revalidate? Stale-while-revalidate es una directiva de caché donde el caché sirve una respuesta ligeramente desactualizada inmediatamente mientras simultáneamente obtiene una versión actualizada en segundo plano. Esto elimina la latencia de revalidación sin servir contenido significativamente desactualizado.
¿Cuál es la diferencia entre caché cache-aside y read-through? En cache-aside, el código de la aplicación gestiona el caché — verifica el caché y, si hay miss, carga los datos del origen y pobla el caché. En read-through, la capa de caché gestiona la obtención del origen de forma transparente, y la aplicación solo interactúa con el caché.