Verwenden eines verteilten Redis-Cache

Abgeschlossen

In einer cloudnativen App erstellen separate Teams Microservices mit ihren bevorzugten Technologien nach ihren eigenen Zeitplänen. Die Microservices sind in der Regel vollständig unabhängig. Sie können von Caching profitieren, aber wenn sie separate Caches ausführen, können sie möglicherweise nicht die optimale Leistungsverbesserung erzielen. Wenn Sie einen einzelnen Cache für mehrere Microservices bereitstellen, können diese Dienste Informationen aus dem Cache abrufen, die von einem anderen Microservice gespeichert wurde.

Stellen Sie sich vor, Sie arbeiten für einen Outdoor-Händler. Sie haben beschlossen, Caching mithilfe eines Redis-Servers in Ihrem Microservice für den Warenkorb zu implementieren. Sie möchten jedoch auch sicherstellen, dass andere Microservices von den zwischengespeicherten Informationen profitieren können.

In dieser Lerneinheit erfahren Sie, wie ein verteilter Redis-Cache die Leistung für mehrere Microservices in Ihrer App optimieren kann. Sie werden auch sehen, dass .NET Aspire es einfach macht, einen verteilten Cache zu implementieren.

Was ist verteiltes Caching?

Ein verteilter Cache ist ein Cache, der von mehreren aufrufenden Diensten gemeinsam genutzt wird. In einer cloudnativen Anwendung sind die aufrufenden Dienste in der Regel Microservices. Wenn Sie einige Informationen im verteilten Cache speichern, z. B. die Details eines beliebten Produkts in Ihrem Katalog, können alle Microservices in Ihrer App diese verwenden und von der Leistungsverbesserung profitieren.

Einrichten des verteilten Cachings in .NET Aspire

Um verteiltes Caching zu verwenden, sind Änderungen sowohl im App-Hostprojekt als auch in den Microservices erforderlich, die den Cache verwenden.

Konfigurieren des App-Hosts

Beginnen Sie im App-Hostprojekt Ihrer Projektmappe, indem Sie zunächst die Hostingkomponente für verteiltes Caching installieren:

dotnet add package Aspire.Hosting.Redis --prerelease

Alternativ können Sie die Verknüpfung Hinzufügen > .NET Aspire-Komponente in Visual Studio verwenden, um die Komponente über den NuGet-Paket-Manager zu installieren:

Screenshot des NuGet-Paket-Managers in Visual Studio mit .NET Aspire Redis-Hostingkomponente für Caching.

Nachdem die Hostingkomponente installiert wurde, registriert der Code in der Program.cs-Datei des App-Hosts den Cache und übergibt sie an Projekte, die den Cache verwenden:

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

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

Konfigurieren der zugreifenden Projekte

Um die .NET Aspire Distributed Cache-Komponente in einem Microservice zu installieren, verwenden Sie einen Befehl wie diesen in Ihren .NET Aspire-Projekten:

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

Auch hier können Sie alternativ den NuGet-Paket-Manager verwenden, um die Komponente zu installieren:

Screenshot des NuGet-Paket-Managers in Visual Studio mit .NET Aspire Redis-Komponenten für Caching.

Verwenden eines verteilten Caches

In jedem Projekt, in dem Sie den Cache verwenden möchten, müssen Sie ein verteiltes Cacheobjekt abrufen, das die Verbindung mit Redis darstellt. In der Program.cs-Datei registriert dieser Code den verteilten Cache:

builder.AddRedisDistributedCache("cache")

Sobald der Cache im zugreifenden Projekt registriert ist, können Sie den verteilten Cache jederzeit abrufen, wenn Sie ihn benötigen, indem Sie Dependency Injection verwenden:

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

Konfiguration

Damit die Microservices eine Verbindung mit dem verteilten Redis-Cache herstellen können, müssen Sie ihnen mitteilen, wo sich dieser befindet, indem Sie eine Verbindungszeichenfolge angeben. Der obige Aufruf der AddRedisDistributedCache()-Methode hat die Verbindungszeichenfolge redis angegeben.

Verwenden Sie einen ConnectionStrings-Abschnitt in Ihrer Konfigurationsdatei, z. B. in appsettings.json, um die Verbindungszeichenfolge zu konfigurieren:

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

Sie können auch appsettings.json verwenden, um das Verhalten der Komponente für verteiltes Caching zu konfigurieren. Mit diesem Code wird beispielsweise die Verbindung so konfiguriert, dass nach fünf Sekunden ein Timeout auftritt und die Verbindungsherstellung dreimal wiederholt wird:

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

Sie können die Verbindung auch mithilfe von Inlinedelegaten in der AddRedisDistributedCache()-Methode konfigurieren. Dieser Code konfiguriert die gleichen Eigenschaften wie das vorherige JSON-Beispiel:

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

Weitere Informationen