Mettre en cache des objets sérialisés
Stockez et récupérez des objets complexes.
Mettre en cache des objets sérialisés est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.
Mettre en cache plus que des chaînes
Les applications réelles mettent en cache des objets, pas uniquement des chaînes. Puisque IDistributedCache stocke des octets, vous devez sérialiser votre objet en une représentation sous forme d’octets ou de chaîne, puis le désérialiser lors de la lecture. JSON est le choix habituel.
Sérialiser avec System.Text.Json
Utilisez System.Text.Json pour transformer un objet en chaîne JSON, puis stockez-la avec 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);Désérialiser lors de la lecture
Lors de la lecture, récupérez la chaîne JSON et désérialisez-la à nouveau dans votre type, sans oublier de gérer la valeur null en cas d’absence dans le cache.
string json = await _cache.GetStringAsync("product:1");
if (json is null) return null;
Product product = JsonSerializer.Deserialize<Product>(json);Un assistant générique réutilisable
Encapsulez la logique de sérialisation et de désérialisation dans des méthodes d’extension afin que les appelants puissent mettre en cache n’importe quel type simplement.
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);
}L’assistant générique de lecture
L’accesseur correspondant désérialise à nouveau vers T et renvoie default en cas d’absence.
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 modèle GetOrCreate
Combinez le cache à la demande et la sérialisation dans un seul assistant : renvoyez l’objet mis en cache ou exécutez une fabrique, mettez son résultat en cache, puis renvoyez-le.
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;
}Utiliser GetOrCreate
L’appel se réduit à une seule ligne qui masque tous les mécanismes de mise en cache.
var product = await _cache.GetOrCreateAsync(
"product:1",
() => _repository.LoadProductAsync(1),
new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(15)
});Options du sérialiseur
Réutilisez une seule instance de JsonSerializerOptions, par exemple en utilisant camelCase et en ignorant les valeurs nulles, afin de conserver des charges utiles mises en cache cohérentes et compactes, tout en évitant d’allouer ces options à répétition.
private static readonly JsonSerializerOptions JsonOptions = new()
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
DefaultIgnoreCondition =
System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
};Gérer les versions des structures mises en cache
Si la structure d’un type mis en cache change, l’ancien JSON peut ne plus être désérialisable. Incluez un composant de version dans la clé, par exemple product:v2:1, afin qu’un déploiement ignore naturellement les entrées incompatibles.
Conserver des charges utiles légères
Ne mettez en cache que les champs dont vous avez besoin. Des charges utiles plus petites réduisent l’utilisation du réseau et de la mémoire dans Redis et accélèrent la sérialisation lors de chaque lecture et écriture.
Tenir compte du coût de la sérialisation
La sérialisation n’est pas gratuite. Pour les chemins très sollicités, envisagez des formats compacts ou la mise en cache de résultats déjà générés, et mesurez toujours les résultats pour confirmer que le cache apporte un gain net.
Vérification rapide
Testez la mise en cache d’objets sérialisés.
Récapitulatif
Pour mettre des objets en cache, sérialisez-les, généralement en JSON avec System.Text.Json, lors de l’écriture, puis désérialisez-les lors de la lecture. Les méthodes génériques SetAsync<T>/GetAsync<T> et l’assistant GetOrCreateAsync masquent les mécanismes et implémentent proprement le cache à la demande. Réutilisez JsonSerializerOptions, versionnez les clés du cache lorsque les structures changent, conservez des charges utiles légères et mesurez le coût de la sérialisation sur les chemins très sollicités.
Apprends C# avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 93
- Leçons
- 346
Questions Fréquemment Posées
La leçon « Mettre en cache des objets sérialisés » est-elle gratuite ?
Oui — le texte complet de « Mettre en cache des objets sérialisés » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Mettre en cache des objets sérialisés » ?
Stockez et récupérez des objets complexes. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C# Academy ?
Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Mettre en cache des objets sérialisés » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?
Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Abstraction IDistributedCache
- Se connecter à Redis
- Modèles de cache et expiration
- Mettre en cache des objets sérialisés