Mise en cache en C# (.NET) : Redis, MemoryCache et autres solutions

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Mise en cache en C# (.NET) : Redis, MemoryCache et alternatives

La mise en cache est l'un des outils clés pour améliorer les performances des applications en C# (.NET). Elle permet de réduire le temps de réponse, de diminuer la charge sur les bases de données et de réduire les coûts d'infrastructure. Dans cet article, nous analyserons les mécanismes intégrés de .NET, les implémentations populaires basées sur Redis, ainsi que des solutions alternatives comme NCache et Couchbase.



1. Mise en cache intégrée : MemoryCache

MemoryCache (espace de noms Microsoft.Extensions.Caching.Memory) est un cache simple et rapide qui stocke les données dans la mémoire vive d'un seul processus. Il est idéal pour les applications monothread ou les serveurs web avec une seule instance.



Installation et connexion

dotnet add package Microsoft.Extensions.Caching.Memory


Exemple d'utilisation de base

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; }}


Avantages et inconvénients

  • + Simplicité, latence réseau nulle.
  • + Prise en charge intégrée de l'expiration (absolue/glissante).
  • - Ne fonctionne pas lors de la mise à l'échelle sur plusieurs serveurs.
  • - Le cache est vidé lors du redémarrage de l'application.


2. Mise en cache distribuée : Redis

Redis est le choix le plus populaire pour la mise en cache distribuée dans l'écosystème .NET. Il fonctionne comme un service séparé, accessible à toutes les instances de l'application. Dans .NET, l'abstraction IDistributedCache est utilisée.



Installation du package

dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis


Configuration dans Program.cs

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


Exemple de travail avec 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); }}


Fonctionnalités avancées de Redis

  • Sérialisation d'objets : utilisez System.Text.Json ou Newtonsoft.Json.
  • Invalidation par balises : les bibliothèques tierces (par exemple, EasyCaching.Redis) permettent de regrouper les entrées.
  • Pub/Sub : pour les notifications de modifications du cache.


3. Alternatives à Redis



3.1 NCache

NCache est une solution commerciale (avec une version gratuite) prenant en charge .NET. Elle offre des fonctionnalités avancées : synchronisation entre nœuds, requêtes de type SQL sur le cache, mise en cache des sessions ASP.NET.

  • + Prise en charge intégrée de IDist

Recommendations