Cache-Aside (Lazy Loading) en C#: Guía Completa

Introducción: Caché bajo demanda

Cache-Aside (Lazy Loading) significa que la aplicación consulta primero la caché y solo si no encuentra el dato, va a la base y luego lo guarda en caché.

Este patrón reduce latencia en lecturas repetidas y te permite controlar explícitamente la invalidación.

El costo es manejar coherencia: si el dato cambia, debes invalidar o actualizar la caché para evitar servir información vieja.

Cache-Aside
Prompt: Cache-aside flow with cache miss and database, clean minimal style.

1. Naturaleza: Almacén de acceso rápido

En un supermercado, los productos más vendidos se ponen cerca de la caja para acelerar el acceso.

Cuando no hay stock cerca, se busca en la bodega y luego se repone el estante visible.

Cache-Aside funciona igual: primero revisas la “estantería rápida” y solo bajas al almacén cuando falta.

Almacén
Prompt: Store front shelf vs warehouse, soft illustration.

2. Mundo Real: Catálogo de productos

Un e-commerce consulta cache para productos populares. Si no está, va a la base, trae el producto y lo guarda en cache.

Cuando el precio cambia, se invalida la entrada de cache para evitar mostrar valores desactualizados.

El rendimiento mejora drásticamente en catálogos con alta repetición de consultas.

Catálogo
Prompt: E-commerce cache flow, clean flat style.

3. Implementación en C#: Código Paso a Paso

public async Task<Producto> GetProductoAsync(string id)
{
    var cached = await cache.GetAsync<Producto>(id);
    if (cached != null) return cached;

    var producto = await repo.GetByIdAsync(id);
    if (producto != null)
        await cache.SetAsync(id, producto, TimeSpan.FromMinutes(10));

    return producto;
}

La clave está en definir un TTL razonable y tener una estrategia clara de invalidación o actualización.

Si los cambios son frecuentes, usa expiraciones cortas o invalidación explícita al escribir.

4. Cache-Aside vs Read-Through

En Cache-Aside, la aplicación controla la carga de datos. En Read-Through, la caché lo hace automáticamente.

Cache-Aside ofrece mayor control; Read-Through simplifica la lógica, pero depende más del proveedor de caché.

5. Diagrama UML

UML Cache-Aside
Prompt: UML diagram of cache-aside pattern, clean vector layout.
Flujo Cache-Aside
Prompt: Cache-aside flow diagram, minimal infographic style.

⚠️ Cuándo NO Usar Cache-Aside

  • Si la consistencia debe ser estricta y no puedes tolerar datos stale.
  • Si no tienes una estrategia clara de invalidación.
  • Si la carga de la base es baja y la caché no aporta valor.

💪 Ejercicio

Implementa Cache-Aside para un catálogo y define una política de expiración por tipo de producto.

Conclusión

Cache-Aside es simple y flexible. Ofrece mejoras de rendimiento significativas en lecturas frecuentes.

Con una buena política de invalidación, se vuelve una herramienta clave en sistemas de datos.