Używanie rozproszonej pamięci podręcznej Redis

Ukończone

W aplikacji natywnej dla chmury oddzielne zespoły tworzą mikrousługi przy użyciu preferowanych technologii we własnych harmonogramach. Mikrousługi zwykle działają całkowicie niezależnie. Mogą one korzystać z buforowania, ale jeśli uruchamiają oddzielne pamięci podręczne, mogą nie być w stanie zrealizować optymalnej poprawy wydajności. Jeśli udostępniasz jedną pamięć podręczną dla wielu mikrousług, te usługi mogą pobierać informacje z pamięci podręcznej przechowywanej przez inną mikrousługę.

Wyobraź sobie, że pracujesz dla sprzedawcy sprzętu zewnętrznego. Podjęto decyzję o zaimplementowaniu buforowania przy użyciu serwera Redis w mikrousłudze koszyka zakupów. Jednak chcesz również upewnić się, że inne mikrousługi mogą korzystać z informacji przechowywanych w pamięci podręcznej.

W tej lekcji dowiesz się, jak rozproszona pamięć podręczna Redis cache może zoptymalizować wydajność wielu mikrousług w aplikacji. Zobaczysz również, jak platforma .NET Aspire ułatwia implementowanie rozproszonej pamięci podręcznej.

Co to jest rozproszone buforowanie?

Rozproszona pamięć podręczna to pamięć podręczna współdzielona między kilkoma usługami wywołującym. W aplikacji natywnej dla chmury usługi wywołujące są zwykle mikrousługami. W przypadku przechowywania niektórych informacji, na przykład szczegółów popularnego produktu w katalogu, w rozproszonej pamięci podręcznej wszystkie mikrousługi w aplikacji mogą potencjalnie jej używać i uzyskiwać od poprawy wydajności.

Konfigurowanie rozproszonego buforowania na platformie .NET Aspire

Aby korzystać z buforowania rozproszonego, zmiany są wymagane zarówno w projekcie hosta aplikacji, jak i w mikrousługach korzystających z pamięci podręcznej.

Konfigurowanie hosta aplikacji

W projekcie hosta aplikacji rozwiązania rozpocznij od zainstalowania rozproszonego składnika hostingu buforowania:

dotnet add package Aspire.Hosting.Redis --prerelease

Alternatywnie możesz użyć skrótu Dodaj > składnik aspirujący platformy .NET w programie Visual Studio, aby zainstalować składnik z menedżera pakietów NuGet:

Zrzut ekranu przedstawiający menedżera pakietów NuGet w programie Visual Studio z wyświetlonym składnikiem hostingu buforowania aspirującego redis platformy .NET.

Po zainstalowaniu składnika hostingu kod w pliku Program.cs hosta aplikacji rejestruje pamięć podręczną i przekazuje go do projektów korzystających z pamięci podręcznej:

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

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

Konfigurowanie projektów zużywających

Aby zainstalować składnik rozproszonej pamięci podręcznej .NET Aspire w mikrousłudze, użyj polecenia takiego jak ten w projektach programu .NET Aspire:

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

Możesz też użyć menedżera pakietów NuGet do zainstalowania składnika:

Zrzut ekranu przedstawiający menedżera pakietów NuGet w programie Visual Studio z wyświetlonymi składnikami buforowania .NET Aspire Redis.

Używanie rozproszonej pamięci podręcznej

W każdym projekcie, w którym chcesz używać pamięci podręcznej, należy uzyskać obiekt rozproszonej pamięci podręcznej, który reprezentuje połączenie z usługą Redis. W pliku Program.cs ten kod rejestruje rozproszoną pamięć podręczną:

builder.AddRedisDistributedCache("cache")

Po zarejestrowaniu pamięci podręcznej w projekcie korzystającym z niego można pobrać rozproszoną pamięć podręczną w dowolnym momencie, używając iniekcji zależności:

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

Konfigurowanie

Aby mikrousługi łączyły się z rozproszoną pamięcią podręczną Redis, należy poinformować ich, gdzie jest, podając parametry połączenia. Powyższe wywołanie metody AddRedisDistributedCache() określonej parametry połączenia o nazwie redis.

ConnectionStrings Użyj sekcji w pliku konfiguracji, na przykład w appsettings.json, aby skonfigurować parametry połączenia:

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

Można również użyć appsettings.json , aby skonfigurować zachowanie rozproszonego składnika buforowania. Na przykład ten kod konfiguruje połączenie w celu przekroczenia limitu czasu po pięciu sekundach i ponawia próbę trzy razy:

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

Możesz również skonfigurować połączenie przy użyciu delegatów wbudowanych w metodzie AddRedisDistributedCache() . Ten kod konfiguruje te same właściwości co poprzedni przykład JSON:

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

Dowiedz się więcej