Almacenamiento en caché de objetos serializados
Almacene y recupere objetos complejos.
Almacenamiento en caché de objetos serializados 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.
Almacenar en caché algo más que cadenas
Las aplicaciones reales almacenan objetos en la caché, no solo cadenas. Como IDistributedCache almacena bytes, debe serializar el objeto a una representación de bytes o cadena y deserializarlo al recuperarlo. JSON es la opción habitual.
Serializar con System.Text.Json
Use System.Text.Json para convertir un objeto en una cadena JSON y, después, almacenarla con SetStringAsync.
using System.Text.Json;
var product = new Product { Id = 1, Name = "Coffee", Price = 4.5m };
string json = JsonSerializer.Serialize(product);
await _cache.SetStringAsync("product:1", json);Deserializar al leer
Al leer, recupere la cadena JSON y vuelva a deserializarla en su tipo, teniendo en cuenta que debe gestionar el null correspondiente al fallo de caché.
string json = await _cache.GetStringAsync("product:1");
if (json is null) return null;
Product product = JsonSerializer.Deserialize<Product>(json);Un asistente genérico reutilizable
Envuelva la lógica de serialización y deserialización en métodos de extensión para que los llamadores puedan almacenar en caché cualquier tipo de forma sencilla.
public static async Task SetAsync<T>(
this IDistributedCache cache, string key, T value,
DistributedCacheEntryOptions options)
{
string json = JsonSerializer.Serialize(value);
await cache.SetStringAsync(key, json, options);
}El asistente genérico Get
El captador correspondiente vuelve a deserializar el valor a T y devuelve default cuando se produce un fallo de caché.
public static async Task<T> GetAsync<T>(
this IDistributedCache cache, string key)
{
string json = await cache.GetStringAsync(key);
return json is null ? default : JsonSerializer.Deserialize<T>(json);
}Un patrón GetOrCreate
Combine cache-aside con la serialización en un único asistente: devuelva el objeto almacenado en la caché o ejecute una factoría, almacene su resultado en la caché y devuélvalo.
public static async Task<T> GetOrCreateAsync<T>(
this IDistributedCache cache, string key,
Func<Task<T>> factory, DistributedCacheEntryOptions options)
{
var existing = await cache.GetAsync<T>(key);
if (existing is not null) return existing;
var created = await factory();
await cache.SetAsync(key, created, options);
return created;
}Usar GetOrCreate
El punto de llamada se convierte en una única línea que oculta todos los mecanismos de almacenamiento en caché.
var product = await _cache.GetOrCreateAsync(
"product:1",
() => _repository.LoadProductAsync(1),
new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(15)
});Opciones del serializador
Reutilice una única instancia de JsonSerializerOptions, por ejemplo, para usar camelCase o ignorar valores nulos, con el fin de mantener las cargas almacenadas en caché coherentes y pequeñas y evitar asignar opciones repetidamente.
private static readonly JsonSerializerOptions JsonOptions = new()
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
DefaultIgnoreCondition =
System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
};Versionar las estructuras almacenadas en caché
Si cambia la estructura de un tipo almacenado en la caché, es posible que el JSON antiguo no se pueda deserializar. Incluya un segmento de versión en la clave, por ejemplo product:v2:1, para que una implementación omita de forma natural las entradas incompatibles.
Mantener ligeras las cargas
Almacene en la caché solo los campos que necesite. Las cargas más pequeñas reducen el uso de red y memoria en Redis y permiten serializar más rápido en cada lectura y escritura.
Tener en cuenta el coste de la serialización
La serialización no es gratuita. En rutas muy utilizadas, considere formatos compactos o almacenar resultados ya renderizados en la caché, y mida siempre el resultado para confirmar que la caché aporta un beneficio neto.
Comprobación rápida
Pruebe el almacenamiento en caché de objetos serializados.
Resumen
Para almacenar objetos en la caché, serialícelos, normalmente como JSON mediante System.Text.Json, al escribir y deserialícelos al leer. Los métodos genéricos SetAsync<T>/GetAsync<T> y un asistente GetOrCreateAsync ocultan los detalles e implementan cache-aside de forma sencilla. Reutilice JsonSerializerOptions, versione las claves de caché cuando cambien las estructuras, mantenga ligeras las cargas y mida el coste de serialización en las rutas muy utilizadas.
Preguntas frecuentes
¿La lección «Almacenamiento en caché de objetos serializados» es gratis?
Sí — el texto completo de «Almacenamiento en caché de objetos serializados» 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 «Almacenamiento en caché de objetos serializados»?
Almacene y recupere objetos complejos. 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 «Almacenamiento en caché de objetos serializados»?
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
- Abstracción IDistributedCache
- Conexión con Redis
- Patrones y expiración de caché
- Almacenamiento en caché de objetos serializados