Una caché es un tipo de memoria in­te­r­me­dia digital que almacena los datos una vez re­cu­pe­ra­dos para accesos po­s­te­rio­res. Cuando se vuelven a solicitar los datos, la consulta se puede responder di­re­c­ta­me­n­te desde la caché, sin tener que contactar con la apli­ca­ción en sí. Un caso típico de uso son los na­ve­ga­do­res web, que tienen su propia caché para almacenar te­m­po­ra­l­me­n­te algunos co­n­te­ni­dos de sitios web. Si visitas las páginas de nuevo más adelante, se cargarán más rá­pi­da­me­n­te, ya que los datos se re­cu­pe­ra­rán di­re­c­ta­me­n­te de la caché y no del servidor.

De­fi­ni­ción

Caché: la caché es una memoria in­te­r­me­dia que contiene datos a los que se va a acceder varias veces y que permite re­cu­pe­rar­los más rápido. Las cachés son una capa tra­n­s­pa­re­n­te entre el usuario y la fuente real de los datos. El proceso de al­ma­ce­na­mie­n­to de datos en la caché se llama caching.

Para explicar cómo funciona una caché, tomemos una analogía de la medicina: imagina que, durante un tra­ta­mie­n­to dental o una in­te­r­ve­n­ción qui­rú­r­gi­ca, el dentista pide a su ayudante un recurso, como un bisturí, un de­sin­fe­c­ta­n­te o un vendaje. Si el recurso está preparado, el auxiliar podrá responder a la solicitud in­me­dia­ta­me­n­te. Si no lo tiene, el ayudante deberá buscar en el botiquín para en­tre­gar­le el recurso al médico. Después de que el médico lo use, el auxiliar dejará el recurso preparado para poder acceder a él más rápido después.

Los recursos no se usan de forma co­m­ple­ta­me­n­te in­de­pe­n­die­n­te: si el médico pide un de­sin­fe­c­ta­n­te, sin duda ne­ce­si­ta­rá una gasa; para usar una aguja, se necesita un hilo. El asistente tendrá listos los recursos ne­ce­sa­rios para minimizar el tiempo de acceso durante el uso.

Como has visto, mantener a mano los recursos que se necesitan a menudo o agrupar los que se usan a la vez es un pro­ce­di­mie­n­to muy útil y ex­tre­ma­da­me­n­te común. En el mundo digital, todos estos procesos re­la­cio­na­dos se resumen bajo el término caching.

¿Cuál es el propósito de una caché?

El propósito principal de la caché es reducir el tiempo de acceso a datos im­po­r­ta­n­tes. Entre los datos co­n­si­de­ra­dos im­po­r­ta­n­tes están los si­guie­n­tes:

  1. Datos que se utilizan con fre­cue­n­cia: en el caso de estos, sería una pérdida de tiempo tener que cargarlos siempre de la memoria más lenta. En lugar de eso, se entregan desde la caché, lo que va más rápido.
  2. Datos complejos de generar: algunos datos son el resultado de un pro­ce­sa­mie­n­to co­mpu­tacio­nal intensivo o se deben combinar a partir de distintas fuentes. En estos casos, es co­n­ve­nie­n­te almacenar los datos listos en la caché para su futuro uso.
  3. Datos que se deben utilizar juntos: en este caso, no sería eficiente cargar los datos solo cuando se soliciten. En cambio, tiene sentido mantener los datos juntos en la caché.

¿Cómo funciona una caché?

Aquí ex­pli­ca­mos en detalle cómo funciona una caché. Entre otras cosas, de­s­cri­bi­mos el fu­n­cio­na­mie­n­to básico de la memoria in­te­r­me­dia y dónde se encuentra.

Esquema básico de una caché

  1. Se solicita un recurso al sistema o programa que cuenta con una memoria caché.
  2. Si el recurso ya se encuentra en ella, se entrega desde aquí. Esto se conoce como cache hit, o sea, acierto de caché.
  3. Si el recurso no está en ella, primero se carga desde el sistema su­b­ya­ce­n­te y luego se entrega. Este caso se conoce como cache miss, o fallo de caché.
  4. Si en el futuro se vuelve a solicitar el mismo recurso, se entrega desde la caché como cache hit.

La imagen ilustra el esquema básico: un cliente solicita un recurso al servidor (1). En caso de cache hit, el recurso ya está en la caché y se entrega in­me­dia­ta­me­n­te al cliente (2). En el caso de cache miss, el recurso so­li­ci­ta­do no está y, por lo tanto, se solicita al sistema su­b­ya­ce­n­te al servidor (en este caso, una base de datos) (2). En cuanto el recurso está di­s­po­ni­ble (3), se entrega al cliente (4) y se almacena en la caché para su uso posterior.

¿Dónde se encuentra la caché?

Una propiedad básica de las cachés es que funcionan de forma oculta. Este hecho ya se refleja en el origen de la palabra: la palabra cache viene del francés y significa “escondido”.

Al contrario que el al­ma­ce­na­mie­n­to real de datos, la memoria caché es invisible para el usuario. Esto significa que tú, el usuario, no debes saber nada sobre las pro­pie­da­des internas de una caché. Cuando haces so­li­ci­tu­des a la memoria de datos, no te das cuenta de que realmente provienen de la caché.

¿Cuántas cachés suele haber?

No­r­ma­l­me­n­te, en un sistema digital, siempre hay varias cachés activas.

Imagina que accedes a un sitio web: el navegador se comunica con un servidor y accede a una serie de recursos. Antes de que se te muestre el contenido de la página en tu navegador, pro­ba­ble­me­n­te partes de este pasen por las si­guie­n­tes cachés: la del pro­ce­sa­dor, la del sistema, la del navegador en tu di­s­po­si­ti­vo y en la CDN (Content Delivery Network) y la caché web en el lado del servidor.

Ventajas e in­co­n­ve­nie­n­tes de las cachés

El hecho de que una apli­ca­ción esté equipada con una caché queda, en principio, en manos del de­sa­rro­lla­dor. Aquí resumimos las ventajas e in­co­n­ve­nie­n­tes de una solución de caché.

Ventaja: enorme aumento de la velocidad

Usar una caché tiene la ventaja potencial de que la velocidad aumenta mucho. No es des­aco­s­tu­m­bra­do lograr una ace­le­ra­ción por un factor de cien. Sin embargo, esta ace­le­ra­ción solo tiene lugar cuando se accede a los datos de forma repetida, y la ace­le­ra­ción real variará eno­r­me­me­n­te de­pe­n­die­n­do del caso.

Ventaja: reducción de la carga para el sistema detrás de la caché

Como la caché entrega los datos muy rápido, la carga en el sistema su­b­ya­ce­n­te se reduce mucho.

Como ejemplo, imagina una página HTML dinámica generada a partir de una plantilla PHP: para vi­sua­li­zar la página, se accede a una base de datos. Este acceso requiere un esfuerzo re­la­ti­va­me­n­te grande. Además, escalar los se­r­vi­do­res de las bases de datos no es trivial, por lo que se pueden ocasionar cuellos de botella en el acceso a las bases de datos, lo que puede limitar el re­n­di­mie­n­to global del sistema. En este caso, es apropiado guardar la página HTML generada en una caché web para utilizar la capacidad del servidor de la base de datos para otras tareas.

In­co­n­ve­nie­n­tes: la caché es difícil de invalidar

Cita

“There are only two hard things in Computer Science: cache in­va­li­da­tion and naming things”.
(“En in­fo­r­má­ti­ca solo hay dos problemas difíciles: invalidar la caché y poner nombres a las cosas”).

Phil Karlton, https://www.ma­r­ti­n­fo­w­ler.com/bliki/TwoHa­r­d­Thi­n­gs.html

El término in­va­li­da­ción de la caché se refiere al momento en el que se decide que los datos de la caché ya no están ac­tua­li­za­dos y deben renovarse. Recuerda la analogía anterior: el auxiliar ayuda al médico poniendo a su di­s­po­si­ción los recursos ya uti­li­za­dos para su uso posterior. Sin embargo, como el espacio di­s­po­ni­ble es limitado, el ayudante va de­s­pe­já­n­do­lo co­n­s­ta­n­te­me­n­te durante la operación. Los recursos que ya se han utilizado se deben apartar, y se deben añadir otros nuevos. En algunos casos, es posible que el auxiliar retire un recurso que el médico necesite aún. En este caso, se utiliza el concepto cache miss: el asistente debe volver a dedicar tiempo y esfuerzo en localizar el recurso necesario.

Como los cache miss son costosos, la mejor es­tra­te­gia de caching es evitarlos siempre que sea posible. Sin embargo, esto puede llevar a que la caché entregue datos des­ac­tua­li­za­dos. Este problema se agrava si hay varias cachés activas y je­rá­r­qui­ca­me­n­te ad­ya­ce­n­tes. Puede ser difícil de­te­r­mi­nar cuándo los datos de la memoria caché deben marcarse como ac­tua­li­za­dos.

Si una caché entrega datos que ya no están ac­tua­li­za­dos, el usuario a menudo ex­pe­ri­me­n­ta problemas: el sitio web visitado tiene errores de vi­sua­li­za­ción o aparecen fra­g­me­n­tos antiguos al recuperar los datos. A veces, encontrar el origen exacto del problema no es fácil, por lo que en ese caso se re­co­mie­n­da vaciar la caché.

¿Qué tipos de cachés existen?

Las cachés consisten en co­m­po­ne­n­tes de hardware o software. Una caché de hardware es una memoria in­te­r­me­dia rápida que reduce los tiempos de acceso a la memoria de datos su­b­ya­ce­n­te. En principio, las cachés de hardware son siempre muy pequeñas en co­m­pa­ra­ción con el tamaño total de la memoria acelerada.

En cambio, las cachés im­ple­me­n­ta­das en el software pueden ser incluso mayores que el recurso su­b­ya­ce­n­te. Este es pa­r­ti­cu­la­r­me­n­te el caso si en una caché se en­cue­n­tran varias versiones de un recurso.

A co­n­ti­nua­ción, se muestra un resumen de los recursos comunes de al­ma­ce­na­mie­n­to en caché, que incluye el tamaño de la caché, el tiempo de acceso a la misma y una in­di­ca­ción de cuánto más se tardaría en acceder a los recursos sin memoria in­te­r­me­dia.

Recurso Caché Tamaño de la caché Tiempo de acceso con caché × tiempo más lento sin caché
Memoria principal Caché de nivel 1 (hardware) Decenas de kilobytes (KB) Menos de un na­no­se­gu­n­do (ns) 200 ×
Disco duro Caché de placa base (hardware) Decenas de megabytes (MB) Cientos de na­no­se­gu­n­dos (ns) 100 ×
Navegador Caché del navegador (software) Varios gigabytes (GB) Decenas de mi­li­se­gu­n­dos (ms) 10-100 ×
Sitios web CDN, Google Page Cache, Wayback Machine (software) Miles de terabytes (petabyte, PB) Menos segundos (s) 2-5 ×

Cachés de hardware

Caché del pro­ce­sa­dor

Un pro­ce­sa­dor moderno funciona in­creí­ble­me­n­te rápido. Los procesos en el chip solo requieren fra­c­cio­nes de na­no­se­gu­n­dos, es decir, ¡mi­l­mi­llo­né­si­mas de segundo! Por el contrario, el acceso a la memoria principal es co­m­pa­ra­ti­va­me­n­te lento: dura unos cientos de na­no­se­gu­n­dos. Por esto, los pro­ce­sa­do­res modernos tienen una jerarquía de cachés de pro­ce­sa­dor.

Un cache hit de la caché del pro­ce­sa­dor más rápida, conocida como caché de nivel 1 o caché L1 (del inglés level 1 cache), es unas 200 veces más rápido que el acceso a la memoria principal.

Caché del disco duro

Un disco duro gira a varios miles de re­vo­lu­cio­nes por minuto. El cabezal de le­c­toe­s­cri­tu­ra recorre los discos y lee los datos en secuencia. Al tratarse de un proceso físico, el acceso a un disco duro es co­m­pa­ra­ti­va­me­n­te lento.

Por esta razón, cada disco duro tiene su propia pequeña caché. De este modo, al menos los datos más uti­li­za­dos, como las partes del sistema operativo, no se tienen que leer cada vez del disco duro, con el esfuerzo co­rre­s­po­n­die­n­te.

La caché del disco duro permite cargar los datos ese­n­cia­les unas 100 veces más rápido. Esto hace que estén di­s­po­ni­bles “in­me­dia­ta­me­n­te” para el usuario.

Cachés de software

Caché del navegador

Al visitar un sitio web, muchos de los datos de la página se almacenan te­m­po­ra­l­me­n­te en el di­s­po­si­ti­vo del visitante. Además del contenido real, esto incluye recursos como imágenes, hojas de estilo y archivos Ja­va­S­cri­pt. En general, muchos de estos recursos se requieren en varias páginas. Para que las páginas se carguen más rápido, es ventajoso almacenar estos en la caché del navegador del di­s­po­si­ti­vo local.

A pesar de que las cachés de navegador son muy prácticas para navegar por internet, pueden también causar problemas. Por ejemplo, a veces ocurre que los de­sa­rro­lla­do­res hacen cambios en un recurso del sitio web, pero la caché del navegador sigue co­n­te­nie­n­do la versión antigua del recurso. En este caso, pueden pro­du­ci­r­se errores de vi­sua­li­za­ción. Para so­lu­cio­nar­lo, puedes vaciar la caché del navegador.

Caché de Google Page

La función “En caché” de Google almacena las páginas de muchos sitios web. Esto significa que se puede acceder a las páginas, aunque el sitio web original esté de­s­co­ne­c­ta­do. El estado de las páginas co­rre­s­po­n­de a la fecha de la última in­de­xa­ción de Googlebot.

Caché de DNS

El sistema de nombres de dominio, conocido como DNS, es un sistema utilizado en todo el mundo para la tra­du­c­ción de dominios de internet en di­re­c­cio­nes IP (o al revés). El DNS devuelve una dirección IP para un nombre de dominio. Por ejemplo, para el dominio ionos.es, devuelve la dirección IP 217.160.86.33.

Las consultas ya re­s­po­n­di­das al DNS se almacenan lo­ca­l­me­n­te en la caché de DNS del propio di­s­po­si­ti­vo, lo que implica que cada re­so­lu­ción sea siempre igual de rápida.

Sin embargo, el uso de la caché de DNS también puede ocasionar problemas, por ejemplo, si la dirección IP pe­r­te­ne­cie­n­te a un dominio ha cambiado debido a un traslado de servidor, pero la dirección antigua sigue al­ma­ce­na­da en la caché de DNS local. En este caso, la conexión al servidor falla. Esto se soluciona borrando la caché de DNS.

Content Delivery Network (CDN)

Las Content Delivery Networks (redes de di­s­tri­bu­ción de contenido), im­ple­me­n­ta­das en todo el mundo, mantienen gran parte de los datos de los sitios web más populares en los llamados edge nodes o nodos pe­ri­fé­ri­cos. Estos nodos pe­ri­fé­ri­cos reflejan los datos en la “periferia” de internet. Los nodos están situados lo­ca­l­me­n­te cerca del usuario y diseñados para entregar los datos lo más rá­pi­da­me­n­te posible. Una CDN actúa como caché para los datos de los sitios web que contiene, lo que minimiza los tiempos de acceso, es­pe­cia­l­me­n­te a los pro­vee­do­res de streaming y a los sitios web.

Caché web

Una caché web contiene do­cu­me­n­tos web como páginas HTML, imágenes, hojas de estilo o archivos Ja­va­S­cri­pt para su uso repetido. Las cachés web modernas, como Varnish y Redis, almacenan los datos de uso frecuente en la memoria RAM y con ello obtienen tiempos de respuesta muy reducidos.

Cuando se vuelven a consultar los datos, la respuesta solo requiere un acceso muy rápido a la memoria. Esto reduce eno­r­me­me­n­te los tiempos de respuesta y la carga de los sistemas su­b­ya­ce­n­tes a la caché, como el servidor web y la base de datos. Otras cachés web muy conocidas son OPcache y la al­te­r­na­ti­va PHP Cache (APC).

Ir al menú principal