Almacena en caché datos que son costosos de producir, se leen frecuentemente y cambian raramente — ahí es donde el almacenamiento en caché da más resultado. El TTL (tiempo de vida) es un equilibrio entre frescura (qué tan actuales deben ser los datos) y tolerancia a la obsolescencia (qué tan incorrectos pueden ser y durante cuánto tiempo).
Qué almacenar en caché
Un buen candidato para caché obtiene puntuaciones altas en los tres aspectos:
- Costoso — uniones DB pesadas, agregaciones, llamadas a API externas, HTML renderizado.
- Frecuentemente leído — las claves activas golpeadas por muchas solicitudes amortizan el costo.
- Cambia raramente — o donde la ligera obsolescencia es aceptable.
No almacenes en caché datos baratos de calcular, con muchas escrituras o secretos por usuario cuya frescura debe ser exacta (p. ej., saldos de cuenta en el momento de una transacción).
Elegir el TTL
Staleness tolerance → TTL:
config / static reference data → long (hours to days)
product listings, article body → medium (minutes)
prices, stock, leaderboards → short (seconds)
must always be exact → don't cache, or use explicit invalidation
Para la corrección de datos que cambian de manera impredecible, combina TTL con invalidación explícita: write-through o delete-on-write para que el caché se vacie en el momento en que cambia la fuente, en lugar de esperar a que expire.
on update(record):
db.save(record)
cache.delete(key(record)) // invalidate now, don't serve stale until TTL
La señal: proporción de aciertos
hit ratio = hits / (hits + misses)
high (>90%) → cache is doing its job
low → TTL too short, keys too granular, or data not cacheable
Monitorea la proporción de aciertos de caché para ajustar los TTLs: una proporción baja significa que apenas estás almacenando en caché; una proporción alta con quejas de obsolescencia significa que los TTLs son demasiado largos.
Por qué es importante
Obtener correctamente qué almacenar en caché y el TTL es el núcleo del almacenamiento en caché efectivo. Almacenar en caché las cosas incorrectas y agregas complejidad sin ganancia; establece TTLs demasiado largos y sirves datos obsoletos; demasiado cortos y pierdes el beneficio. Usar tolerancia a la obsolescencia para elegir TTLs, agregar invalidación explícita para la corrección y monitorear la proporción de aciertos te proporciona una forma principiada y medible de almacenar en caché.
