Caching en C# (.NET): Redis, MemoryCache y otras soluciones

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Caching en C# (.NET): Redis, MemoryCache y alternativas

El caching es una de las herramientas clave para mejorar el rendimiento de las aplicaciones en C# (.NET). Permite reducir el tiempo de respuesta, disminuir la carga en las bases de datos y reducir los costos de infraestructura. En este artículo analizaremos los mecanismos integrados de .NET, las implementaciones populares basadas en Redis, así como soluciones alternativas como NCache y Couchbase.



1. Caching integrado: MemoryCache

MemoryCache (espacio de nombres Microsoft.Extensions.Caching.Memory) es una caché simple y rápida que almacena datos en la memoria RAM de un solo proceso. Es ideal para aplicaciones de un solo hilo o servidores web con una sola instancia.



Instalación y configuración

dotnet add package Microsoft.Extensions.Caching.Memory


Ejemplo de uso básico

using Microsoft.Extensions.Caching.Memory;

public class DataService{ private readonly IMemoryCache _cache; private readonly TimeSpan _cacheDuration = TimeSpan.FromMinutes(5);

public DataService(IMemoryCache cache) => _cache = cache;

public async Task<string> GetDataAsync(string key) { if (!_cache.TryGetValue(key, out string cachedData)) { cachedData = await FetchFromDatabaseAsync(key); _cache.Set(key, cachedData, new MemoryCacheEntryOptions { AbsoluteExpirationRelativeToNow = _cacheDuration }); } return cachedData; }}


Ventajas y desventajas

  • + Simplicidad, latencia de red cero.
  • + Soporte integrado para caducidad (absoluta/deslizante).
  • - No funciona al escalar a múltiples servidores.
  • - Al reiniciar la aplicación, la caché se borra.


2. Caching distribuido: Redis

Redis es la opción más popular para el caching distribuido en el ecosistema .NET. Funciona como un servicio independiente accesible para todas las instancias de la aplicación. En .NET se utiliza la abstracción IDistributedCache.



Instalación del paquete

dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis


Configuración en Program.cs

builder.Services.AddStackExchangeRedisCache(options =>{    options.Configuration = "localhost:6379";    options.InstanceName = "MyAppCache";});


Ejemplo de trabajo con IDistributedCache

public class RedisCacheService{    private readonly IDistributedCache _cache;

public RedisCacheService(IDistributedCache cache) => _cache = cache;

public async Task SetAsync(string key, byte[] data, int minutes = 10) { await _cache.SetAsync(key, data, new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(minutes) }); }

public async Task<byte[]> GetAsync(string key) { return await _cache.GetAsync(key); }}


Funcionalidades avanzadas de Redis

  • Serialización de objetos: use System.Text.Json o Newtonsoft.Json.
  • Invalidación por etiquetas: bibliotecas de terceros (por ejemplo, EasyCaching.Redis) permiten agrupar registros.
  • Pub/Sub: para notificaciones de cambios en la caché.


3. Alternativas a Redis



3.1 NCache

NCache es una solución comercial (con versión gratuita) compatible con .NET. Ofrece funcionalidades avanzadas: sincronización entre nodos, consultas similares a SQL en la caché, almacenamiento en caché de sesiones ASP.NET.

  • + Soporte integrado para IDist

Recommendations