0Pricing
C# Academy · Lección

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 EvictByTagAsync cuando 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 write

Bloqueo 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 regeneration

Caché 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-wide

Comprobació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.EvictByTagAsync las 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

  1. Algoritmos de limitación de tasa
  2. Configuración del middleware de limitación de tasa
  3. Conceptos básicos del almacenamiento en caché de salida
  4. Políticas e invalidación de caché
← Volver a C# Academy