Abstraction IDistributedCache
Mettez les données en cache sur plusieurs serveurs.
Abstraction IDistributedCache est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 1 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.
Pourquoi utiliser un cache distribué ?
Un cache en mémoire réside dans un seul processus : il est donc perdu lors d’un redémarrage et n’est pas partagé entre les serveurs. Un cache distribué réside dans un stockage externe, comme Redis, que chaque instance de votre application peut lire et modifier, ce qui rend la mise en cache cohérente dans un déploiement horizontal.
L’interface IDistributedCache
ASP.NET Core masque la mise en cache distribuée derrière IDistributedCache dans Microsoft.Extensions.Caching.Distributed. Votre code dépend de cette interface, et non directement de Redis, ce qui vous permet de remplacer les implémentations.
public interface IDistributedCache
{
byte[] Get(string key);
Task<byte[]> GetAsync(string key, CancellationToken token = default);
void Set(string key, byte[] value, DistributedCacheEntryOptions options);
void Remove(string key);
void Refresh(string key);
}Il stocke des octets
Remarquez que le cache stocke des byte[]. Pour mettre en cache des chaînes ou des objets, vous devez d’abord les sérialiser. Des méthodes d’extension pratiques pour les chaînes existent dans le cas courant.
using Microsoft.Extensions.Caching.Distributed;
await cache.SetStringAsync("greeting", "Hello, world");
string value = await cache.GetStringAsync("greeting");Injecter le cache
Demandez IDistributedCache par injection dans le constructeur, comme n’importe quel service.
public class WeatherService
{
private readonly IDistributedCache _cache;
public WeatherService(IDistributedCache cache)
{
_cache = cache;
}
}Lire depuis le cache
GetStringAsync renvoie null lorsque la clé est absente ou expirée. Gérez toujours le cas d’absence.
string cached = await _cache.GetStringAsync("forecast:istanbul");
if (cached is null)
{
// cache miss: load from source
}Écrire dans le cache
SetStringAsync stocke une valeur avec des options d’expiration facultatives (abordées dans une leçon ultérieure).
await _cache.SetStringAsync(
"forecast:istanbul",
"22C sunny",
new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
});Supprimer et actualiser
RemoveAsync supprime une clé du cache, par exemple lorsque les données sous-jacentes changent. RefreshAsync réinitialise une expiration glissante sans modifier la valeur.
await _cache.RemoveAsync("forecast:istanbul");
await _cache.RefreshAsync("session:abc123");L’implémentation en mémoire
Pour le développement ou les tests, enregistrez le cache distribué en mémoire. Il implémente la même interface, votre code reste donc identique, mais les données ne sont pas réellement partagées entre les processus.
builder.Services.AddDistributedMemoryCache();Code indépendant du fournisseur
Comme vous dépendez uniquement de IDistributedCache, passer du fournisseur en mémoire à Redis (ou à SQL Server) se limite à modifier une ligne d’enregistrement, sans aucun changement dans vos services.
Conventions de nommage des clés
Utilisez des clés structurées et associées à un espace de noms, comme entity:id:field (par exemple user:42:profile). Des conventions claires empêchent les collisions et rendent l’invalidation du cache prévisible.
string key = $"user:{userId}:profile";Quand ne pas mettre en cache
Mettez en cache les données qui sont souvent lues et changent rarement. Les données très volatiles ou sensibles propres à un utilisateur peuvent ne pas convenir, et vous devez toujours mettre en balance les risques liés aux données obsolètes et les gains de performance.
Vérification rapide
Testez l’abstraction IDistributedCache.
Récapitulatif
IDistributedCache abstrait un cache externe et partagé, de sorte que chaque instance de l’application voit les mêmes données. Il stocke des byte[], avec GetStringAsync/SetStringAsync pour les chaînes, ainsi que RemoveAsync et RefreshAsync. Dépendre de l’interface rend le code indépendant du fournisseur et permet de passer de AddDistributedMemoryCache à Redis avec une seule ligne. Utilisez des clés clairement associées à un espace de noms.
Questions Fréquemment Posées
La leçon « Abstraction IDistributedCache » est-elle gratuite ?
Oui — le texte complet de « Abstraction IDistributedCache » 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 « Abstraction IDistributedCache » ?
Mettez les données en cache sur plusieurs serveurs. 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 1 sur 4.
Combien de temps prend la leçon « Abstraction IDistributedCache » ?
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