Políticas e invalidación de caché
Controle la duración y las etiquetas de la caché.
Políticas e invalidación de caché es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 4 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.
Políticas con nombre
En lugar de repetir la configuración de caché en cada endpoint, defina una vez políticas con nombre reutilizables y haga referencia a ellas por su nombre.
builder.Services.AddOutputCache(options =>
{
options.AddPolicy("Short", policy =>
policy.Expire(TimeSpan.FromSeconds(10)));
options.AddPolicy("Long", policy =>
policy.Expire(TimeSpan.FromMinutes(10)));
});Aplicar una política con nombre
Haga referencia a la política por su nombre al almacenar un endpoint en caché.
app.MapGet("/catalog", GetCatalog)
.CacheOutput("Long");Etiquetas de caché
Las etiquetas agrupan entradas relacionadas de la caché para que pueda invalidarlas juntas. Etiquete un endpoint con Tag en su política.
app.MapGet("/products", GetProducts)
.CacheOutput(policy => policy
.Expire(TimeSpan.FromMinutes(5))
.Tag("products"));IOutputCacheStore
La invalidación se realiza mediante IOutputCacheStore. Inyéctelo y llame a EvictByTagAsync para purgar todas las entradas que tengan una etiqueta.
app.MapPost("/products", async (
Product p, AppDb db, IOutputCacheStore cache, CancellationToken ct) =>
{
db.Products.Add(p);
await db.SaveChangesAsync(ct);
await cache.EvictByTagAsync("products", ct);
return Results.Created($"/products/{p.Id}", p);
});Por qué invalidar al escribir
Una lista almacenada en caché queda obsoleta en cuanto cambian los datos subyacentes. Expulsar la etiqueta correspondiente en cada creación, actualización o eliminación mantiene las lecturas actualizadas sin esperar a que expire.
// After any mutation:
await cache.EvictByTagAsync("products", ct);Etiquetar por recurso
Etiquete con mayor granularidad para expulsar solo las respuestas almacenadas en caché de un elemento, no las de toda la colección.
app.MapGet("/products/{id}", GetProduct)
.CacheOutput(policy => policy.Tag("products"));
// Evict the single item's detail + the list together
await cache.EvictByTagAsync("products", ct);Reglas Vary-By en una política
Combine la expiración, las etiquetas y las reglas Vary-By en una política con nombre para definir un contrato de caché completo.
options.AddPolicy("ProductList", policy => policy
.Expire(TimeSpan.FromMinutes(5))
.Tag("products")
.SetVaryByQuery("page", "size"));Valor Vary-By personalizado
VaryByValue permite basar la clave de caché en datos arbitrarios de la solicitud, como el identificador de un tenant obtenido de la solicitud.
policy.VaryByValue(context =>
new KeyValuePair<string, string>(
"tenant",
context.Request.Headers["X-Tenant"].ToString()));Expulsión frente a expiración
Hay dos formas de que las entradas salgan de la caché:
- Expiración: basada en el tiempo y automática mediante
Expire. - Expulsión: explícita, mediante
EvictByTagAsynccuando cambian los datos.
Utilice ambas: una expiración breve como red de seguridad y la expulsión para garantizar la corrección.
// belt-and-suspenders: Expire(5min) + EvictByTag on writeBloqueo y protección contra estampidas
El almacenamiento en caché de salida agrupa de forma predeterminada las solicitudes simultáneas que no encuentran una entrada: cuando muchas solicitudes llegan a la vez a un endpoint sin caché, solo una ejecuta el handler y las demás esperan. Puede deshabilitar este comportamiento con SetLocking(false).
policy.SetLocking(false); // allow concurrent regenerationCaché de salida distribuida
De forma predeterminada, el almacén está en memoria y es específico de cada instancia. Para usar varios servidores, respáldelo con un almacén distribuido (por ejemplo, Redis) para que todas las instancias compartan la misma caché y la invaliden de la misma forma.
// Register a distributed IOutputCacheStore implementation
// (e.g. a Redis-backed package) so EvictByTag works cluster-wideComprobación rápida
Compruebe su comprensión de la invalidación.
Resumen
Ha aprendido las políticas de caché y la invalidación:
- Defina políticas con nombre reutilizables y aplíquelas por su nombre.
- Las etiquetas agrupan entradas;
IOutputCacheStore.EvictByTagAsynclas purga al escribir. - Combine la expiración (automática) con la expulsión (explícita).
- Use un almacén distribuido en implementaciones con varios servidores.
Con esto termina el curso sobre limitación de velocidad y almacenamiento en caché.
Preguntas frecuentes
¿La lección «Políticas e invalidación de caché» es gratis?
Sí — el texto completo de «Políticas e invalidació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 «Políticas e invalidación de caché»?
Controle la duración y las etiquetas de la caché. 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 4 de 4.
¿Cuánto tiempo toma la lección «Políticas e invalidació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
- Algoritmos de limitación de tasa
- Configuración del middleware de limitación de tasa
- Conceptos básicos del almacenamiento en caché de salida
- Políticas e invalidación de caché