Utiliser un cache distribué Redis

Effectué

Dans une application native cloud, les équipes distinctes créent des microservices avec leurs technologies préférées selon leurs propres planifications. Les microservices fonctionnent généralement de manière totalement indépendante. Ils peuvent bénéficier de la mise en cache, mais s’ils utilisent des caches séparés, ils risquent de ne pas pouvoir bénéficier d’une amélioration optimale des performances. Si vous fournissez un seul cache pour plusieurs microservices, ces services peuvent récupérer dans le cache des informations stockées par un autre microservice.

Imaginez que vous travaillez pour un détaillant d’équipements extérieurs. Vous avez décidé d’implémenter la mise en cache à l’aide d’un serveur Redis dans votre microservice de panier d’achat. Toutefois, vous souhaitez également vous assurer que d’autres microservices peuvent tirer parti des informations que vous mettez en cache.

Dans cette unité, vous allez découvrir comment un cache Redis distribué peut optimiser les performances de plusieurs microservices dans votre application. Vous verrez également comment .NET Aspire facilite l’implémentation d’un cache distribué.

Qu’est-ce que la mise en cache distribuée ?

Un cache distribué est un cache partagé entre plusieurs services appelants. Dans une application native cloud, les services appelants sont généralement des microservices. Lorsque vous stockez des informations, par exemple les détails d’un produit populaire dans votre catalogue, dans le cache distribué, tous les microservices de votre application peuvent potentiellement les utiliser et bénéficier de l’amélioration des performances.

Configuration de la mise en cache distribuée dans .NET Aspire

Pour utiliser la mise en cache distribuée, des modifications sont requises dans le projet hôte de l’application et les microservices qui utilisent le cache.

Configurer l’hôte de l’application

Dans le projet hôte de l’application de votre solution, commencez par installer le composant d’hébergement de mise en cache distribuée :

dotnet add package Aspire.Hosting.Redis --prerelease

Vous pouvez également utiliser le raccourci Ajouter > Composant Aspire .NET dans Visual Studio pour installer le composant à partir du gestionnaire de package NuGet :

Capture d’écran montrant le gestionnaire de package NuGet dans Visual Studio affichant le composant d’hébergement de mise en cache Redis .NET Aspire.

Une fois le composant d’hébergement installé, le code dans le fichier Program.cs de l’hôte d’application inscrit le cache et le transmet aux projets qui utilisent le cache :

// Register the cache
var redis = builder.AddRedis("redis");

// Initiate the consuming project and pass the cache
builder.AddProject<Projects.ConsumingProject>()
       .WithReference(redis);

Configurer les projets consommateurs

Pour installer le composant de cache distribué .NET Aspire dans un microservice, utilisez une commande semblable à celle-ci dans vos projets .NET Aspire :

dotnet add package Aspire.StackExchange.Redis.DistributedCache --prerelease

Là encore, vous pouvez choisir d’utiliser le gestionnaire de package NuGet pour installer le composant :

Capture d’écran montrant le gestionnaire de package NuGet dans Visual Studio affichant les composants de mise en cache Redis .NET Aspire.

Utilisation d’un cache distribué

Dans n’importe quel projet dans lequel vous souhaitez utiliser le cache, vous devez obtenir un objet de cache distribué, qui représente la connexion à Redis. Dans le fichier Program.cs, ce code inscrit le cache distribué :

builder.AddRedisDistributedCache("cache")

Une fois le cache inscrit dans le projet consommateur, vous pouvez récupérer le cache distribué chaque fois que vous en avez besoin à l’aide de l’injection de dépendances :

public class MyService(IDistributedCache cache)
{
   public async Task InitializeAsync()
   {
      // Check if there is cached content
      var cachedInfo = await cache.GetAsync("myinfo")

      if (cachedInfo is null)
      {
         // There's no content in the cache so formulate it here
         // For example, query databases.

        // Store the content in the cache
        await cache.SetAsync("myinfo", cachedInformation, new()
           { AbsoluteExpiration = DateTime.Now.AddSeconds(60) }
        );
      }
   }
}

Configuration

Pour que les microservices se connectent au cache distribué Redis, vous devez leur indiquer où il se trouve en fournissant une chaîne de connexion. L’appel ci-dessus à la méthode AddRedisDistributedCache() a spécifié une chaîne de connexion appelée redis.

Utilisez une section ConnectionStrings dans votre fichier de configuration, par exemple dans appsettings.json, pour configurer la chaîne de connexion :

{
  "ConnectionStrings": {
    "redis": "redis.contoso.com:6379"
  }
}

Vous pouvez également utiliser appsettings.json pour configurer le comportement du composant de mise en cache distribuée. Par exemple, ce code configure la connexion pour qu’elle expire après cinq secondes et qu’elle soit réessayée trois fois :

{
  "Aspire": {
    "StackExchange": {
      "Redis": {
        "ConfigurationOptions": {
          "ConnectTimeout": 5000,
          "ConnectRetry": 3
        }
      }
    }
  }
}

Vous pouvez également configurer la connexion à l’aide de délégués inlined sur la méthode AddRedisDistributedCache(). Ce code configure les mêmes propriétés que l’exemple JSON précédent :

builder.AddRedisDistributedCache(
   "redis",
   configureOptions: options => options.ConnectTimeout = 5000
);

En savoir plus