Introducción: Por qué el caché avanzado lo cambia todo
En la arquitectura moderna de alta carga, la velocidad de respuesta y la reducción de la carga en la base de datos son tareas clave. El caché en C# (.NET) ha dejado de ser simplemente recordar un resultado: es un sistema complejo de gestión del estado, tiempo de vida y consistencia de los datos. A nivel avanzado, el desarrollador debe elegir entre Redis, Memcached y soluciones integradas según el escenario.
En este artículo analizaremos tres enfoques principales de caché en el ecosistema .NET, compararemos su rendimiento, complejidad de implementación y errores típicos. Aprenderá cómo configurar un caché distribuido con Redis, optimizar Memcached para altas cargas y cuándo el IMemoryCache integrado es la mejor solución.
Caché integrado en .NET: IMemoryCache e IDistributedCache
IMemoryCache — caché local rápido
El caché integrado IMemoryCache del espacio de nombres Microsoft.Extensions.Caching.Memory es la solución ideal para una sola instancia de la aplicación. Almacena datos en la memoria RAM del proceso, proporcionando una latencia mínima.
// Registro en Startup.cs o Program.csbuilder.Services.AddMemoryCache();
// Uso en un serviciopublic class ProductService{ private readonly IMemoryCache _cache;
public ProductService(IMemoryCache cache) { _cache = cache; }
public async Task<Product> GetProductAsync(int id) { string cacheKey = $"product_{id}"; if (!_cache.TryGetValue(cacheKey, out Product product)) { product = await _repository.GetProductByIdAsync(id); var cacheEntryOptions = new MemoryCacheEntryOptions() .SetAbsoluteExpiration(TimeSpan.FromMinutes(5)) .SetSlidingExpiration(TimeSpan.FromMinutes(1)) .SetPriority(CacheItemPriority.High);
_cache.Set(cacheKey, product, cacheEntryOptions); } return product; }}Ventajas: latencia de red cero, configuración sencilla, soporte de expiración deslizante y absoluta.
Desventajas: no funciona al escalar a varios servidores; limitado por la RAM del proceso.
IDistributedCache — abstracción para cachés distribuidos
La interfaz IDistributedCache permite cambiar fácilmente entre Redis, SQL Server o NCache sin modificar la lógica de negocio. La implementación predeterminada es MemoryDistributedCache (local), pero para producción normalmente se elige Redis.
// Registro de la implementación Redisbuilder.Services.AddStackExchangeRedisCache(options =>{ options.Configuration = "localhost:6379"; options.InstanceName = "SampleInstance";});
// Usopublic async Task SetCacheAsync(string key, byte[] data){ var cache = context.RequestServices.GetRequiredService<IDistributedCache>(); await cache.SetAsync(key, data, new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1) });}La ventaja clave es la unificación: escribes el código una vez y el proveedor de caché se cambia mediante configuración.
Redis en C#: técnicas y patrones avanzados
Conexión y pool de conexiones
Para trabajar con Redis en .NET se utiliza la biblioteca StackExchange.Redis. En lugar de crear una nueva conexión cada vez, use multiplexación: una sola conexión para toda la aplicación.
// Singleton globalpublic static ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:6379,abortConnect=false");
// Obtener la base de datosIDatabase db = redis.GetDatabase(0);
// Operaciones básicasawait db.StringSetAsync("user:1", "John Doe", TimeSpan.FromMinutes(30));string name = await db.StringGetAsync("user:1");
Blogs
Book Recommendations
Leer también
Trabajo con fechas y horas en JavaScript: métodos avanzados y bibliotecas
Programación funcional en JavaScript: fundamentos y ejemplos
MyApp se detuvo: resolviendo "Unfortunately stopped" en 2025 con Kotlin
OAuth 2.0 y autorización JWT en TypeScript: guía completa
Cómo aprobar una entrevista de Java: las mejores preguntas de la A a la Z