Patrones y expiración de caché
Aplique el patrón cache-aside y establezca expiraciones.
Patrones y expiración de caché es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.
Patrones de almacenamiento en caché
La forma de leer y escribir en una caché es un patrón. El más habitual en las aplicaciones web es cache-aside, en el que su código gestiona la caché alrededor del origen de datos.
El patrón cache-aside
Cache-aside, o carga diferida, funciona en tres pasos: comprobar la caché; si se produce un fallo, cargar los datos desde el origen y rellenar la caché; devolver el valor. La caché se rellena bajo demanda.
async Task<string> GetForecastAsync(string city)
{
string key = $"forecast:{city}";
string cached = await _cache.GetStringAsync(key);
if (cached is not null) return cached;
string fresh = await _api.LoadForecastAsync(city);
await _cache.SetStringAsync(key, fresh);
return fresh;
}Por qué la caducidad es esencial
Los datos almacenados en la caché pueden quedar obsoletos. La caducidad expulsa automáticamente las entradas después de un periodo, de modo que la siguiente lectura cargue datos actualizados, equilibrando el rendimiento y la antigüedad de los datos.
Caducidad absoluta
La caducidad absoluta expulsa una entrada en un momento fijo, independientemente de su uso. Utilícela cuando los datos solo sean válidos durante un intervalo conocido.
var options = new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
};Caducidad deslizante
La caducidad deslizante reinicia el temporizador en cada acceso. Una entrada permanece mientras se utilice con regularidad, pero se expulsa después de un periodo de inactividad. Es ideal para datos similares a los de una sesión.
var options = new DistributedCacheEntryOptions
{
SlidingExpiration = TimeSpan.FromMinutes(5)
};Combinar ambas
Puede establecer ambas opciones: la caducidad deslizante mantiene activos los datos que se utilizan con frecuencia, mientras que un límite absoluto garantiza que la entrada nunca permanezca más allá de un máximo y obliga a actualizarla.
var options = new DistributedCacheEntryOptions
{
SlidingExpiration = TimeSpan.FromMinutes(5),
AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1)
};Aplicar opciones al establecer el valor
Pase las opciones como tercer argumento de SetStringAsync, o de SetAsync, para que la entrada incluya su propia política de caducidad.
await _cache.SetStringAsync(key, fresh, options);Write-through e invalidación
Cuando cambien los datos de origen, expulse o actualice la caché para que las lecturas no devuelvan valores obsoletos. El patrón cache-aside suele combinar las escrituras con una llamada a RemoveAsync sobre la clave afectada.
await _repository.UpdateForecastAsync(city, value);
await _cache.RemoveAsync($"forecast:{city}");Evitar la estampida de caché
Si caduca una clave popular, muchas solicitudes pueden intentar volver a cargarla al mismo tiempo, lo que provoca una estampida. Puede mitigarla con bloqueos breves, caducidades ligeramente aleatorias o una actualización en segundo plano, de modo que solo una solicitud reconstruya la entrada.
Elegir los valores de caducidad
Elija las duraciones según la frecuencia con la que cambien los datos y el nivel de antigüedad que sea aceptable. Los datos de referencia toleran TTL largos; los datos que cambian rápidamente necesitan TTL cortos o una invalidación basada en eventos.
El coste de un fallo de caché
Cada fallo de caché requiere cargar los datos desde el origen, por lo que debe diseñar las claves y los TTL para maximizar la tasa de aciertos. Supervise las proporciones de aciertos y fallos para ajustar la caché con el tiempo.
Comprobación rápida
Pruebe los patrones de caché y la caducidad.
Resumen
El patrón cache-aside comprueba la caché, carga los datos cuando se produce un fallo y la rellena. La caducidad absoluta expulsa la entrada en un momento fijo; la caducidad deslizante se reinicia con cada acceso; puede combinar ambas mediante DistributedCacheEntryOptions. Invalide la caché al escribir mediante RemoveAsync, evite las estampidas y ajuste los TTL y las claves según los patrones de acceso y el nivel de antigüedad aceptable.
Preguntas frecuentes
¿La lección «Patrones y expiración de caché» es gratis?
Sí — el texto completo de «Patrones y expiración de caché» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Patrones y expiración de caché»?
Aplique el patrón cache-aside y establezca expiraciones. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C# Academy?
No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Patrones y expiración de caché»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C# Academy?
Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Abstracción IDistributedCache
- Conexión con Redis
- Patrones y expiración de caché
- Almacenamiento en caché de objetos serializados