fedorthinks

Curso exprés · No. 15

Una cache es un lugar pequeño y rápido donde guardas una respuesta que ya resolviste, para que la próxima vez que la necesites la leas en lugar de rehacer el trabajo. Es el mayor truco de velocidad de la informática — y viene con el problema difícil más famoso de la informática: saber cuándo la respuesta recordada se ha quedado obsoleta.

20 conceptos · un diagrama para cada uno · hoja de referencia al final

§ 01

Una cache es una idea sencilla: guarda una copia de una respuesta en algún lugar rápido, para no pagar por producirla dos veces. Entiende esto y toda cache que conozcas será el mismo truco en un lugar distinto.

El mapa: 20 conceptos en siete grupos

Un mapa de metro: primero ves todas las líneas a la vez, luego recorres estación por estación.

Primero van tres básicos — qué es una cache, hit y miss, y por qué funciona. Luego seis grupos, uno por capítulo: las capas de cache, el hit ratio, la frescura, las estrategias para actualizar y desalojar, las trampas y cómo usarla bien.

Cada concepto siguiente tiene la misma forma: su nombre en inglés (apréndelo — es el término), una imagen de la vida cotidiana, un diagrama y una ficha con los campos problema, idea, ejemplo, coste, cuándo usarlo y relaciones.

BasicsCacheHit / missLocalityLayersCache hierarchyIn-memory (Redis)CDNHit ratioHit ratioCold / warm cacheMemory ↔ speedFreshnessStale dataTTLCache invalidationStrategiesCache-asideWrite-through / aroundEviction (LRU)TrapsCache stampedeStale readsWhat not to cacheUsing it wellHot · costly · stableStaleness budget
Los básicos arriba, luego seis grupos — los capítulos 2–7 los siguen.

Cache — una cache recuerda la respuesta

Un cuaderno de notas en tu escritorio junto a un archivador lento — una vez que has buscado algo, lo apuntas, y la próxima vez lees la nota en lugar de cruzar la sala otra vez.

Una cache es un almacén pequeño y rápido que guarda el resultado de un trabajo costoso — una consulta a la base de datos, una página calculada, un archivo descargado — para que la siguiente petición sea barata. Lo costoso ocurre una vez; la lectura barata, muchas veces. Ese es todo el principio. Lo demás son detalles sobre dónde vive el cuaderno y cuándo fiarse de lo que hay escrito.

Appneeds an answerCachesmall · fastSource of truthDB · API · computeask firstonly if missingexpensive work once → cheap reads many times
La app pregunta primero a la cache. Solo va a la fuente lenta cuando falta la respuesta.
ConceptCache· el cuaderno junto al archivador
Problema
El mismo trabajo costoso se hace una y otra vez.
Idea
Guardar el resultado en algún lugar rápido y leerlo de ahí.
Ejemplo

Una página calculada, el resultado de una consulta a la base de datos, un archivo descargado — guardados en la cache.

Coste
Memoria para las copias, y el riesgo de que una copia quede obsoleta.
Relaciones

El resto del curso trata de dónde viven las caches y cuándo fiarse de ellas.

Cache hit y cache miss — los dos resultados

Buscas la nota. O está ahí y la lees al instante — o está en blanco y, después de todo, tienes que ir al archivador.

Cuando la respuesta está en la cache, es un cache hit — rápido y barato. Cuando no está, es un cache miss — haces el trabajo lento y normalmente guardas el resultado para que la próxima vez sea un hit. Estas dos palabras describen toda interacción con una cache. El juego del caching consiste en convertir misses en hits.

HITRequestCachefound ✓Responsefast · cheapMISSRequestCachenot found ✗Sourceslow workstore the result → next time it's a hit
Un hit responde al instante. Un miss va hasta la fuente y guarda el resultado para la próxima vez.
TermCache hit / miss· encontrado / no encontrado
Qué es
Un hit significa que la respuesta estaba en la cache. Un miss, que no.
Cómo funciona

En un miss haces el trabajo lento y pones el resultado en la cache — así la próxima vez es un hit.

Ejemplo

Primera visita a una página: un miss y una consulta a la base de datos. Segunda visita: un hit en milisegundos.

Relaciones

La proporción de hits es el hit ratio, la nota principal de la cache.

Locality — funciona gracias a la repetición

Una cafetería que memoriza los pedidos de sus clientes habituales — compensa solo porque las mismas personas piden lo mismo una y otra vez.

El caching compensa cuando las mismas respuestas se necesitan repetidamente — y casi todo en la informática es repetitivo. Esta propiedad se llama locality (localidad): el acceso no es aleatorio, sino que se concentra en unos pocos elementos calientes. La misma página popular, el perfil del mismo usuario, la misma búsqueda, pedidos miles de veces. Así, una cache pequeña con los populares puede absorber una gran parte del trabajo. Sin repetición, no hay motivo para cachear.

requestsitems, most popular firsthot set — a small cache catches most requestslong tail — rarely asked, not worth caching
Unos pocos elementos calientes reciben la mayoría de las peticiones; la larga cola casi nunca se pide.
ConceptLocality· el conjunto caliente
Qué es
Los mismos datos se piden una y otra vez.
Por qué importa

Una cache pequeña de elementos calientes atrapa una gran parte de las peticiones.

Ejemplo
Una página popular, el perfil del mismo usuario, la misma búsqueda.
Pega
Sin repetición — la cache casi no acierta y solo malgasta memoria.
Relaciones
La locality es lo que hace posible un hit ratio alto.

Una cache guarda una copia rápida de una respuesta costosa. Un hit es leer la nota; un miss es el paseo hasta el archivador. El trabajo es convertir misses en hits.

§ 02

El caching no es una sola cosa en un solo lugar — es un patrón que se repite en cada capa entre un usuario y los datos. Cuanto más cerca está la copia de quien la necesita, más rápida es.

Cache Hierarchy — cuanto más cerca la cache, más rápido el hit

Suministros que guardas en tu escritorio, en la habitación, en el edificio y en un almacén al otro lado de la ciudad — cuanto más cerca, más rápido los consigues, pero menos cabe.

Hay una escalera de caches entre un usuario y la verdad — una cache hierarchy (jerarquía de caches): el navegador guarda archivos en tu dispositivo, una CDN guarda copias cerca de tu ciudad, la aplicación mantiene datos calientes en memoria y la CPU tiene caches diminutas a nanosegundos. Las caches más cercanas son más rápidas pero más pequeñas. Una petición prueba primero la más cercana y, si falla, sigue hacia fuera.

UserBrowseryour deviceCDNnear your cityApp cacheRedis · RAMDatabaseorigineach miss falls outward →closer: faster, smallerfarther: slower, biggerand inside every machine: CPU caches (L1 / L2 / L3), nanoseconds away
Una petición va de la cache más cercana hacia fuera. Más cerca es más rápido, pero más pequeño.
ConceptCache Hierarchy· capas de caches
Problema
Una sola cache no puede ser cercana, rápida y grande a la vez.
Idea

Una cadena de caches: la cercana, pequeña y rápida; la lejana, grande y más lenta.

Ejemplo
Navegador → CDN → cache de la app (Redis) → base de datos.
Coste
Más lugares donde puede esconderse una copia obsoleta.
Relaciones

Las capas son la CDN, la cache en memoria y las caches de la CPU.

In-memory Cache (Redis) — el caballo de batalla

Un empleado que tiene los archivos más pedidos sobre el escritorio, al alcance de la mano, en lugar de ir a buscar cada uno al archivo del sótano cada vez.

La mayoría de las apps ponen una cache en memoria dedicada — una herramienta como Redis o Memcached — entre la aplicación y la base de datos. La memoria es muchísimo más rápida que el disco, así que guardar ahí los resultados calientes convierte una consulta lenta a la base de datos en una lectura casi instantánea. Cuando alguien dice "añade una cache" para acelerar un backend, normalmente se refiere a esto.

AppRedis / Memcached · in RAMuser:42 → {name, plan}page:/home → <html>top:products → [ … ]Databaseon disk · slowGETmiss
Redis guarda pares clave → valor en la RAM. La app solo va a la base de datos en disco cuando hay un miss.
ToolIn-memory Cache· Redis, Memcached
Problema

Las consultas a la base de datos en disco son lentas, y las mismas se repiten.

Idea
Guardar los resultados calientes en la RAM, buscados por clave.
Ejemplo

La clave user:42 guarda un perfil; la app lo lee de Redis en lugar de la base de datos.

Coste

Un servicio más; la memoria es limitada; las copias pueden quedar obsoletas.

Cuándo usarlo
Para acelerar un backend delante de una fuente de verdad lenta.
Relaciones
Suele llenarse con el patrón cache-aside.

CDN — la web cacheada cerca del usuario

Libros populares en bibliotecas locales de todas partes, para que nadie tenga que pedirlos por correo a un único archivo central.

Una CDN (content delivery network, red de entrega de contenido) es caching aplicado a la geografía: guarda copias de tus páginas, imágenes y archivos en servidores de todo el mundo (servidores edge), y sirve a cada usuario desde uno cercano. Por eso un sitio global carga rápido en todas partes y no solo cerca de su servidor de origen. Es la misma idea de hit/miss — la copia simplemente se reparte por el mapa para vencer la distancia.

Edge · Tokyocopy near usersEdge · Pariscopy near usersEdge · São Paulocopy near usersEdge · New Yorkcopy near usersOriginone servermiss → fetch from origin onceusers hit the nearest edge
Los usuarios reciben la copia del edge más cercano. Un edge solo va al origen cuando hay un miss.
ToolCDN· red de entrega de contenido
Problema

El servidor está en un solo país, así que los usuarios lejanos esperan por la distancia.

Idea
Guardar copias en servidores edge por todo el mundo.
Ejemplo

Las imágenes de un sitio se sirven desde una ciudad cercana al usuario, no desde el origen.

Coste

Las copias repartidas por el mundo también se quedan obsoletas; hace falta una forma de refrescarlas.

Cuándo usarlo

Archivos estáticos, páginas y recursos para usuarios en muchos lugares.

Relaciones
Una de las capas de la cache hierarchy.

El caching es un patrón repetido en cada capa: navegador, CDN, almacén en memoria, CPU. Más cerca es más rápido pero más pequeño — y un miss cae hacia la siguiente capa.

§ 03

Una cache solo vale su complejidad si de verdad atrapa la mayoría de las peticiones. Un número — el hit ratio — te dice si tu cache se gana el sueldo.

Hit Ratio — la nota que cuenta

A un portero se le juzga por la proporción de tiros que para. Uno que para el 95% lo cambia todo; uno que para el 10% apenas cambia el partido.

El hit ratio es la fracción de peticiones servidas desde la cache en lugar de la fuente lenta. Un hit ratio del 95% significa que solo una de cada veinte peticiones llega a la base de datos — una reducción enorme de carga y latencia. Un hit ratio del 10% significa que la cache es sobre todo sobrecarga. Este único número es como juzgas si una cache funciona.

95%19 hits · only 1 request in 20 reaches the database10%2 hits · 18 misses — the cache is mostly overheadhitmiss
95%: una de cada veinte peticiones llega a la base de datos. 10%: la cache casi no atrapa nada.
TermHit Ratio· proporción de hits
Qué es

hits ÷ (hits + misses) — la proporción de peticiones servidas desde la cache.

Ejemplo

95% — 1 petición de cada 20 llega a la base de datos. 10% — la cache apenas ayuda.

Por qué

La principal forma de saber si una cache funciona, y la principal palanca que se ajusta.

Relaciones

Sube con la locality y un buen desalojo; baja con una cache fría y un TTL corto.

Cold y Warm Cache — una cache fría tiene que calentarse

Una tienda nueva con las estanterías vacías no sirve rápido a nadie al principio — se abastece según los clientes piden, hasta que los artículos populares están siempre a mano.

Justo después de arrancar, una cache está fría (cold) — vacía, así que cada petición es un miss y va a la fuente lenta. A medida que fluye el tráfico real, se llena de respuestas populares y se vuelve caliente (warm), y el hit ratio sube. Por eso el rendimiento puede verse mal justo después de un reinicio o un deploy, y luego se estabiliza. Algunos sistemas precalientan (pre-warm) la cache a propósito, cargando datos que se sabe que son calientes antes de que lleguen los usuarios.

hit ratiotime →restart / deploy: cold, all misseswarm: popular answers cacheddashed: pre-warmed before users arrive
Tras un reinicio el hit ratio empieza en cero y sube. Una cache precalentada empieza alto.
TermCold / Warm Cache· precalentamiento
Qué es
Fría — una cache vacía, todo es miss. Caliente — llena, y acierta.
Ejemplo

Tras un deploy el sitio va lento unos minutos hasta que la cache se llena.

Pega

Reiniciar todos los nodos a la vez manda toda la carga a la base de datos.

Solución

Precalentar: cargar los datos calientes antes de que lleguen los usuarios.

Relaciones
Explica las caídas del hit ratio tras los reinicios.

Memory–Speed Trade-off — una cache cambia memoria por velocidad

Alquilar un escritorio más grande para que quepan más archivos al alcance de la mano — cuesta más espacio, pero vas mucho menos al archivador.

El caching no es gratis: gastas memoria, que es limitada y cuesta dinero, para ahorrar tiempo. Una cache más grande guarda más y acierta más a menudo, pero no puedes cachearlo todo — así que el arte está en cachear las cosas correctas: las respuestas calientes, caras y muy pedidas que dan más velocidad por byte guardado. Una cache es un trade-off deliberado.

Spend memorylimited · costs moneyCachethe right answersBuy timefewer slow tripsyou can't cache everything → most speed per byte storedthe hit ratio tells you if the trade is paying
Pagas en memoria y compras tiempo. El hit ratio te dice si el trato compensa.
ConceptMemory–Speed Trade-off· memoria por tiempo
Idea
Pagar con memoria para hacer menos viajes a la fuente lenta.
Ejemplo
Más RAM para Redis — caben más claves, más hits.
Coste
La memoria es limitada y cuesta dinero; no puedes cachearlo todo.
Cuándo usarlo
Cachea lo que da más velocidad por byte: lo caliente y lo caro.
Relaciones

El hit ratio mide el beneficio; el desalojo libera el espacio.

El hit ratio es la libreta de notas de la cache. Gastas memoria para comprar velocidad — así que cachea las respuestas calientes y caras que ganan más hits por byte.

§ 04

Una respuesta recordada puede quedar desfasada mientras sigues fiándote de ella. Saber cuándo dejar de fiarte de la copia es el problema central, y de verdad difícil, del caching.

Stale Data — el precio del caching

Ese número de teléfono que apuntaste en una nota adhesiva es oro — hasta que tu amigo se muda y la nota, en silencio, pasa a ser incorrecta.

La otra cara de recordar una respuesta es que la respuesta real puede cambiar mientras tu copia no. Un dato stale (obsoleto) es un valor cacheado que ya no coincide con la verdad — el precio viejo, la publicación borrada, el stock de hace una hora. Toda cache corre el riesgo de servir datos obsoletos, y decidir cuánta obsolescencia puedes tolerar es la primera pregunta de diseño real de cualquier cache.

10:0010:05Source: $10the truthSource: $12price changedCache: $10✓ matchesCache: $10✗ stalecopyupdatenobody told the cachestale = a cached value that no longer matches the truth
El precio cambió en la fuente, pero nadie actualizó la copia cacheada — quedó obsoleta.
TermStale Data· copia desactualizada
Qué es
Un valor cacheado que ya no coincide con la fuente.
Ejemplo
El precio viejo, la publicación borrada, el stock de hace una hora.
Por qué ocurre
La verdad cambió; la copia no.
Relaciones

Acotado por el TTL y la invalidación; cuánto es aceptable lo fija el staleness budget.

TTL — que caduque con un temporizador

Leche con fecha de caducidad — pasada esa fecha, no te fías sin comprobar, aunque todavía tenga buen aspecto.

La herramienta de frescura más simple es un TTL (time to live, tiempo de vida): cada entrada cacheada recibe una caducidad, y después de ella la entrada se considera eliminada, lo que obliga a traer datos frescos. Un TTL corto significa datos más frescos pero más misses; un TTL largo, más hits pero más obsolescencia. Elegir el TTL es elegir tu punto exacto en el equilibrio entre frescura y velocidad — por tipo de dato, según lo rápido que cambie de verdad.

fresh — served from cache (TTL = 60s)expired → refetchstored+60sEach entry carries an expiry timer.short TTL → fresher data, more misseslong TTL → more hits, more staleness
Mientras no se agota el TTL, la respuesta sale de la cache. Después, la siguiente petición trae datos frescos.
PracticeTTL· tiempo de vida
Problema
Una copia puede quedar obsoleta y la cache no lo sabe.
Idea
Dar a cada entrada una hora de caducidad; pasada, volver a traerla.
Ejemplo

Un tipo de cambio cacheado con un TTL de 60 segundos: nunca tiene más de un minuto.

Coste
Un TTL corto significa más misses; uno largo, más obsolescencia.
Cuándo usarlo

Casi siempre, como red de seguridad base; ajústalo por tipo de dato.

Relaciones

Una clave caliente que caduca para todos a la vez causa un cache stampede.

Cache Invalidation — por qué es famosamente difícil

Saber en el instante exacto en que un dato cambió en otro lugar del mundo, para romper tu nota en el momento justo — fácil de decir, enloquecedor de hacer.

Hay un chiste recurrente según el cual en informática solo hay dos problemas difíciles, y la cache invalidation (invalidación de cache) — saber cuándo hay que tirar un valor cacheado — es uno de ellos. Es difícil porque la cache a menudo no sabe que los datos de origen cambiaron; el cambio ocurrió en otro lugar. El siguiente capítulo reúne las estrategias que se usan contra este problema exacto.

Service AwritesDatabasechangedCacheold copyService BreadsUPDATEstale? who tells the cachethe change happened elsewhere
Un servicio cambia la base de datos, otro lee la copia vieja de la cache. ¿Quién avisa a la cache?
ConceptCache Invalidation· tirar la copia
Problema
Los datos cambiaron en otro lugar, y la cache no lo sabe.
Idea
Tirar o refrescar la copia cuando la verdad cambia.
Ejemplo
Tras un cambio de precio, borrar la clave del producto de la cache.
Coste

Hay que encontrar todos los lugares donde vive la copia, sin olvidar ninguno.

Relaciones

Estrategias: cache-aside, write-through, write-around; red de seguridad: TTL.

Toda respuesta cacheada puede quedar obsoleta. Un TTL la caduca con un temporizador — y saber exactamente cuándo invalidar es uno de los problemas realmente difíciles de la informática.

§ 05

Dos fuerzas deciden qué hay en una cache y si es de fiar: cómo la actualizas cuando la verdad cambia, y cómo haces sitio cuando se llena. Ambas tienen estrategias con nombre que vale la pena conocer.

Cache-aside — la app llena la cache

Miras primero tu cuaderno; si está en blanco, vas al archivador, lees el expediente y apuntas la respuesta antes de seguir.

El patrón más común es el cache-aside (también llamado lazy loading, carga perezosa): al leer, la app consulta la cache; en un miss, trae el dato de la fuente, guarda el resultado y lo devuelve. La cache se llena bajo demanda con exactamente lo que de verdad se pide. Es simple y popular — y su punto débil es la obsolescencia, ya que un valor se queda en la cache hasta que algo lo caduca o lo invalida.

AppCacheDatabase1. GET key2. miss3. read from DB4. result5. SET key (+TTL)6. return to user — next read is a hit
Cache-aside paso a paso: preguntar a la cache → miss → leer la base de datos → guardar en la cache → devolver.
PatternCache-aside· lazy loading
Problema
Necesitas llenar la cache sin saber de antemano qué se va a pedir.
Idea

Lo hace la app: consulta la cache, en un miss lee la base de datos y pone el resultado en la cache.

Ejemplo

GET user:42 → miss → SELECT a la base de datos → SET user:42 con un TTL.

Coste

Un valor puede estar obsoleto hasta que se agote su TTL o alguien lo borre.

Cuándo usarlo

Lo habitual en la mayoría de las caches delante de una base de datos.

Relaciones

A menudo va con el TTL; en las escrituras se complementa con write-through.

Write-through y Write-around — mantener coherentes las escrituras

Cuando un dato cambia, puedes actualizar la nota del escritorio en el mismo momento que el expediente maestro — o saltarte la nota y dejar que se vuelva a traer fresca la próxima vez.

Cuando los datos se escriben, eliges cómo se mantiene al día la cache. Write-through actualiza la cache y la fuente a la vez, así la cache nunca queda obsoleta (a costa de escrituras más lentas). Write-around escribe solo en la fuente y deja que la cache falle y se recargue más tarde, evitando cachear datos que nadie vuelve a leer. Cuál elijas depende de tu mezcla de lecturas y escrituras.

Write-throughWriteCacheupdatedDatabaseupdatedcache never stalecost: slower writesWrite-aroundWriteCacheskippedDatabaseupdatedcache reloads on the next missskips data nobody re-reads
Write-through escribe en la cache y la base de datos a la vez. Write-around escribe solo en la base de datos; la cache se pone al día en un miss.
PatternWrite-through / Write-around· políticas de escritura
Problema
En una escritura, la cache y la fuente se desincronizan.
Idea

Write-through — actualizar cache y base de datos juntas. Write-around — escribir solo en la base de datos.

Ejemplo

Un perfil que se vuelve a leer enseguida — write-through. Logs que casi nunca se leen — write-around.

Coste

Write-through — escrituras más lentas. Write-around — un miss justo después de la escritura.

Cuándo usarlo
Según tu mezcla de lecturas y escrituras.
Relaciones

Formas de hacer cache invalidation desde el lado de la escritura.

Eviction (LRU, LFU) — decidir qué quitar cuando está llena

Un escritorio pequeño y lleno — para añadir un expediente nuevo tienes que guardar uno, así que quitas el que llevas siglos sin tocar, no el que usas cada hora.

Una cache tiene espacio limitado, así que cuando se llena debe desalojar (evict) algo. La política más común es LRU (least recently used, el menos usado recientemente): quitar lo que lleva más tiempo sin tocarse, apostando a que no hará falta pronto. Existen otras — LFU (least frequently used) quita lo menos usado con frecuencia. El desalojo es cómo una cache pequeña conserva automáticamente los elementos calientes y suelta los fríos, sin crecer para siempre.

F (new)cache is fullAused 1s agoBused 2h agoCused 5m agoDused 10s agoEused 1m agoB evicted — least recently used (LRU)LFU instead drops the least frequently used
La cache está llena y llega F. Con LRU, sale B — nadie la ha tocado desde hace más tiempo.
PolicyEviction· LRU, LFU
Problema
La cache se queda sin espacio, y siguen llegando datos nuevos.
Idea
Quitar lo que menos probablemente se necesite pronto.
Ejemplo

LRU — quitar lo que lleva más tiempo sin tocarse. LFU — quitar lo menos usado.

Coste
A veces quita lo que está a punto de pedirse — un miss extra.
Relaciones

Mantiene alto el hit ratio sin aumentar la memoria. No es lo mismo que la invalidación: esa trata de datos erróneos, el desalojo trata del espacio.

La invalidación decide cuándo un valor cacheado es incorrecto; el desalojo decide qué quitar cuando se acaba el espacio. Cache-aside, write-through, LRU — nombres para esos dos trabajos.

§ 06

El poder del caching viene con filos cortantes. Los fallos clásicos no son exóticos — son predecibles, tienen nombre, y conocerlos es la mitad de evitarlos.

Cache Stampede — cuando caduca una clave caliente

Un artículo popular se agota, y en el instante en que ocurre, cien clientes corren al mostrador a pedirlo a la vez — desbordando al único empleado que repone.

Cuando caduca una entrada cacheada popular, todas las peticiones que la querían fallan en el mismo momento y golpean juntas la fuente lenta — un cache stampede (o thundering herd, estampida). La base de datos, protegida durante horas, recibe de golpe a toda la multitud y puede ceder. Las soluciones se conocen — dejar que una petición refresque mientras las demás esperan, o escalonar las caducidades — pero hay que anticiparlo: un stampede aparece justo cuando el tráfico es más alto.

requestrequestrequestrequestrequestrequestHot keyjust expiredDatabaseall at once → bucklesall miss at onceFixesOne refreshes, rest waitlock / single flightStagger expiriesTTL + random jitter
Una clave caliente caducó — todas las peticiones se lanzan a la vez contra la base de datos. Abajo: las dos soluciones conocidas.
PitfallCache Stampede· thundering herd
Problema

Una clave caliente caduca, y todas las peticiones fallan y golpean la base de datos a la vez.

Ejemplo

La página de inicio caduca en el pico de tráfico — miles de peticiones la reconstruyen al mismo tiempo.

Solución

Una petición refresca mientras las demás esperan; o dispersión aleatoria del TTL (jitter).

Cuándo pensarlo
Con toda clave caliente que tenga un TTL.
Relaciones
Un efecto secundario del TTL en datos populares.

Stale Reads — rápido, seguro de sí y equivocado

Leer un precio de una nota adhesiva vieja y citarlo con seguridad — el número llega al instante, y es el número equivocado.

Una cache sirve con gusto un valor obsoleto rápido y con total seguridad — una stale read (lectura obsoleta). Normalmente no pasa nada — un contador de visitas algo viejo no daña a nadie. Pero con datos donde la corrección es crítica — el saldo bancario, el inventario, los permisos — una lectura obsoleta puede ser un fallo real. La habilidad está en saber qué datos toleran la obsolescencia y cuáles deben estar siempre frescos, y no cachear sin cuidado los segundos.

PitfallStale Read· servir el pasado
Problema
La cache sirve un valor viejo, rápido y con seguridad.
Inofensivo
Un contador de visitas con un minuto de retraso.
Un fallo real
El saldo bancario, el inventario, los permisos.
Solución
Decidir de antemano qué datos toleran la obsolescencia y cuáles no.
Relaciones

Cómo se manifiestan los stale data; se trata con un staleness budget.

What Not to Cache — algunas cosas no deberían cachearse nunca

No guardas una fotocopia de un documento que se reescribe cada minuto, ni de la carta privada de alguien en un escritorio compartido — la copia es incorrecta, o no debería estar ahí.

No todo pertenece a una cache. Los datos que cambian constantemente dan un hit ratio pobre y obsolescencia frecuente. Los datos sensibles o por usuario corren el riesgo de filtrarse si una cache compartida entrega la copia de un usuario a otro. Y los datos que casi nadie pide solo malgastan espacio. Saber qué no cachear es tan importante como saber qué cachear.

Fast-changingpoor hit ratio · staleSensitive / per-usercan leakRarely requestedwastes spacehow a leak happens:User AGET /accountShared cache/account → A's dataUser Bsees A's data ✗knowing what NOT to cache matters as much as what to cache
Tres tipos de datos que no pertenecen a una cache. Abajo: cómo una cache compartida entrega los datos del usuario A al usuario B.
PracticeWhat Not to Cache· la lista de exclusión
Cambia rápido
Hit ratio pobre y obsolescencia constante.
Sensible

Los datos por usuario y secretos en una cache compartida pueden llegar al usuario equivocado.

Poco pedido
Casi nadie lo pide — solo ocupa espacio.
Relaciones
La otra cara del cache target.

Las mordeduras clásicas del caching tienen nombre: stampedes cuando caduca una clave caliente, stale reads servidas con falsa seguridad, y cachear cosas que nunca deberían estar ahí.

§ 07

El caching es una herramienta potente: enorme velocidad por poca memoria, pagada con el riesgo de servir el pasado. Usado con intención, es uno de los mejores tratos de la informática.

Cache Target — cachear lo caliente, caro y de cambio lento

Memorizas los pedidos habituales de los clientes de siempre y las indicaciones que das diez veces al día — no las peticiones únicas ni lo que cambia por minutos.

El cache target ideal es lo que se lee con frecuencia, es caro de producir y rara vez cambia — esa combinación da la mayor velocidad con el menor riesgo de obsolescencia. Una página popular construida con una consulta lenta y recalculada idéntica todo el día es perfecta. Un valor que cambia constantemente, se lee poco y es sensible es lo contrario.

Read oftenhot · high hit ratioExpensive to makeslow query · computeRarely changeslow staleness riskIdeal cache targetmost speed · least risk
Las tres condiciones juntas forman el cache target ideal.
PracticeCache Target· qué cachear
Idea
Se lee a menudo + es caro de producir + rara vez cambia.
Ejemplo

Una página popular construida con una consulta lenta, idéntica todo el día.

Contraejemplo
Un valor que cambia constantemente, se lee poco y es sensible.
Relaciones
Lo contrario de what not to cache; da un hit ratio alto.

Staleness Budget — decídelo de antemano

Acordar de antemano cuánto desfase es aceptable — un widget del tiempo puede tener minutos de retraso; un saldo bancario no puede tener segundos.

Antes de cachear nada, decide cuánta obsolescencia tolera — ese es su staleness budget (presupuesto de obsolescencia). Esa decisión condiciona todo lo demás — el TTL, si necesitas invalidación activa, si es seguro cachearlo siquiera. Hazla explícita por tipo de dato. "¿Cuánto se le permite estar equivocado, y durante cuánto tiempo?" es la pregunta que convierte el caching de fuente de fallos misteriosos en un trato controlado y deliberado.

can be stale for a whilemust be freshstatic filesview countweather: minutesinventorypermissionsbank balancethe budget sets the TTL, invalidation — or "don't cache"
A la izquierda, datos que toleran la obsolescencia; a la derecha, datos que deben estar siempre frescos.
PracticeStaleness Budget· cuán viejo es aceptable
Problema

Sin una decisión explícita, la obsolescencia aparece como fallos misteriosos.

Idea
Para cada tipo de dato, decidir de antemano cuán viejo puede ser.
Ejemplo

El tiempo — unos minutos están bien. Un saldo bancario — ni un segundo.

Qué fija

La duración del TTL, si necesitas invalidación, si cachear siquiera.

Relaciones

La respuesta al riesgo de los stale data y las stale reads.

Cómo se conectan los conceptos

Dos platos de una balanza: velocidad en uno, frescura en el otro. Cada concepto de este curso mueve uno de ellos.

Todo el caching es un tira y afloja entre velocidad y frescura. A la izquierda, lo que sube el hit ratio: locality, una cache caliente, un desalojo sensato. A la derecha, lo que mantiene a raya los stale data: el staleness budget fija el TTL, y la invalidación tira lo que es incorrecto. Un TTL corto es más fresco pero acierta menos; en una clave caliente, el mismo TTL puede provocar un stampede.

LocalityCold / warmEviction (LRU)Hit ratiospeedStampedeStale datafreshnessStaleness budgetTTLInvalidationaside · throughspeed ↔ freshnessmore hits ← cache longer · fresher ← cache shorter
Fuerzas de velocidad a la izquierda, fuerzas de frescura a la derecha. El presupuesto fija el TTL; el TTL acota la obsolescencia y puede provocar un stampede.
Antes de añadir una cache
  • ¿Son calientes los datos — se piden con la repetición suficiente para dar un hit ratio real?
  • ¿Son caros de producir, de modo que un hit ahorre de verdad un trabajo significativo?
  • ¿Cuán obsoletos pueden estar — cuál es el TTL, y necesito invalidación activa?
  • ¿Qué pasa cuando caduca una entrada caliente — podría causar un stampede?
  • ¿Es seguro cachearlos — sin datos secretos por usuario en una cache compartida?
  • ¿Cómo sabré que funciona — estoy midiendo el hit ratio?
Señales de que cacheas bien
  • Puedes decir el hit ratio de tus caches importantes.
  • Cada cosa cacheada tiene un TTL deliberado ajustado a lo rápido que cambia de verdad.
  • Nada por usuario ni secreto está en una cache compartida por accidente.
  • Tus claves calientes no harán un stampede contra la fuente de golpe al caducar.
  • Cacheas las respuestas calientes, caras y de cambio lento — y dejas el resto.

Hoja de referencia: los 20 conceptos

Básicos

Cacheel cuaderno

Una copia rápida de una respuesta costosa, para no hacer el trabajo dos veces.

Cache hit / missencontrado / no encontrado

La respuesta estaba en la cache — o tuviste que ir a la fuente.

Localityel conjunto caliente

Los mismos datos se piden una y otra vez — por eso funcionan las caches.

Capas

Cache Hierarchycapas de caches

Navegador → CDN → memoria de la app → base de datos. Más cerca es más rápido, pero más pequeño.

In-memory CacheRedis, Memcached

Datos calientes en RAM delante de una base de datos lenta.

CDNred de entrega de contenido

Copias de archivos y páginas en servidores cercanos a los usuarios.

Hit ratio

Hit Ratioproporción de hits

La proporción de peticiones servidas desde la cache. La nota principal de la cache.

Cold / Warm Cacheprecalentamiento

Una cache vacía falla en todo; una llena acierta. El precalentamiento la carga por adelantado.

Memory–Speed Trade-offmemoria por tiempo

Pagas en memoria, compras tiempo. Cachea lo que da más velocidad por byte.

Frescura

Stale Datacopia desactualizada

La copia ya no coincide con la verdad.

TTLtiempo de vida

La vida útil de una entrada; pasada, se vuelve a traer.

Cache Invalidationtirar la copia

Tirar la copia cuando la verdad cambia. Famosamente difícil.

Estrategias

Cache-asidelazy loading

La app consulta la cache, lee la base de datos en un miss y guarda el resultado.

Write-through / Write-aroundpolíticas de escritura

Escribir en la cache y la base de datos juntas — o solo en la base de datos.

Eviction (LRU / LFU)hacer sitio

Al llenarse, quitar la entrada que lleva más tiempo sin tocarse o la menos usada.

Trampas

Cache Stampedethundering herd

Caduca una clave caliente — todos golpean la base de datos a la vez.

Stale Readservir el pasado

Rápido, seguro de sí y equivocado. Peligroso con dinero, stock y permisos.

What Not to Cachela lista de exclusión

Cambia rápido, sensible, poco pedido.

Usarlo bien

Cache Targetqué cachear

Se lee a menudo, es caro de hacer, rara vez cambia.

Staleness Budgetcuán viejo es aceptable

Decidir de antemano cuán viejos pueden ser los datos. Fija el TTL y la invalidación.

El caching cambia un poco de memoria por una enorme velocidad, con el riesgo de servir el pasado. Bien hecho, es deliberado: las respuestas correctas, con un staleness budget elegido a propósito.

Fin del curso exprés · 7 capítulos · 20 conceptos

Ahora toca la práctica: encuentra la operación repetida más lenta de algo que hayas construido — una consulta, una llamada a una API, una página calculada — y pon delante una cache pequeña con un TTL explícito. Luego observa cómo cambian el hit ratio y la latencia. El trato se vuelve real en el momento en que lo mides. Pero quédate con una idea por encima de las demás: el caching es simplemente recordar una respuesta costosa en lugar de rehacer el trabajo — y toda parte difícil es en realidad una sola pregunta, hecha con honestidad: ¿cuándo deja de ser verdad lo que recordé?