Volviendo a responder mi propia pregunta, el principal problema aquí es cómo evitar que todo expire al mismo tiempo. Si se permite que eso suceda, el sistema se ralentizará y se congestionará mientras vuelve a llenar el caché.
La mayoría de las veces, esto realmente no es un problema en la práctica. Con el tiempo, todos los componentes tienden a derivar en términos del tiempo que caducan. Si hay varios componentes que se están reconstruyendo todos al mismo tiempo, es un olor a código porque probablemente deberían almacenarse en caché como un solo componente (por ejemplo, si tenía un encabezado, cuerpo y pie de página únicos almacenados en caché por separado, tal vez pueda solo almacena la página en caché).
Ciertamente, hay momentos en los que es necesario almacenar en caché muchas cosas al mismo tiempo, por ejemplo, después de iniciar un sistema, si borramos todo el caché o rotamos las claves del caché. En este caso, generalmente no es tan malo porque los componentes se llenan rápidamente y las caducidades se separan posteriormente.
En la medida en que esto sea un problema, hay un par de soluciones:
- Simplemente elija una duración de caducidad de caché aleatoria dentro de un rango en lugar de una duración fija, por ejemplo, un entero aleatorio entre 15 y 90 minutos en lugar de 60 minutos.
- Permitir respuestas rancias. El hecho de que un elemento de caché haya caducado no significa que no pueda usarlo si todavía está allí. Dependiendo de las necesidades del negocio, puede ser aceptable usarlo si hay un problema de rendimiento al buscar la versión original después de la expiración. En HTTP, este es el propósito de "must-revalidate" (si es verdadero, significa no usar la versión en caché después de la expiración).