Использование распределенного кэша Redis

Завершено

В облачном приложении отдельные команды создают микрослужбы с предпочитаемыми технологиями по собственным расписаниям. Микрослужбы обычно работают полностью независимо. Они могут воспользоваться кэшированием, но, если они выполняют отдельные кэши, они могут не реализовать оптимальное улучшение производительности. Если вы предоставляете один кэш для нескольких микрослужб, эти службы могут получать сведения из кэша, хранящегося другой микрослужбой.

Представьте, что вы работаете на открытом оборудовании розничной торговли. Вы решили реализовать кэширование с помощью сервера Redis в микрослужбе корзины покупок. Однако вы также хотите убедиться, что другие микрослужбы могут воспользоваться сведениями, которые вы кэшируете.

В этом уроке вы узнаете, как распределенный кэш Redis может оптимизировать производительность для нескольких микрослужб в приложении. Вы также увидите, как .NET Aspire упрощает реализацию распределенного кэша.

Что такое распределенное кэширование?

Распределенный кэш является общим для нескольких вызывающих служб. В облачном приложении службы звонков обычно являются микрослужбами. При хранении некоторых сведений, например сведений о популярном продукте в каталоге в распределенном кэше, все микрослужбы в приложении могут использовать его и повысить производительность.

Настройка распределенного кэширования в .NET Aspire

Чтобы использовать распределенное кэширование, изменения требуются как в проекте узла приложения, так и в микрослужбах, использующих кэш.

Настройка узла приложения

Начните с установки компонента размещения распределенного кэширования в хост-проекте вашего решения:

dotnet add package Aspire.Hosting.Redis --prerelease

Кроме того, можно использовать ярлык "Добавить > компонент .NET Aspire " в Visual Studio для установки компонента из диспетчера пакетов NuGet:

Снимок экрана: диспетчер пакетов NuGet в Visual Studio с компонентом кэширования .NET Aspire Redis.

После установки компонента размещения код в файле Program.cs узла приложения регистрирует кэш и передает его в проекты, использующие кэш:

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

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

Настройка используемых проектов

Чтобы установить компонент распределенного кэша .NET в микрослужбе, используйте следующую команду в проектах .NET Aspire:

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

Кроме того, можно также использовать диспетчер пакетов NuGet для установки компонента:

Снимок экрана: диспетчер пакетов NuGet в Visual Studio с компонентами кэширования .NET Aspire Redis.

Использование распределенного кэша

В любом проекте, где требуется использовать кэш, необходимо получить объект распределенного кэша, представляющий подключение к Redis. В файле Program.cs этот код регистрирует распределенный кэш:

builder.AddRedisDistributedCache("cache")

После регистрации кэша в используемом проекте можно получить распределенный кэш в любое время, используя внедрение зависимостей:

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

Настройка

Чтобы микрослужбы подключались к распределенном кэшу Redis, необходимо сообщить им, где он находится, предоставив строка подключения. Приведенный выше вызов AddRedisDistributedCache() метода указал строка подключения с именемredis.

ConnectionStrings Используйте раздел в файле конфигурации, например в appsettings.json, чтобы настроить строка подключения:

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

Вы также можете использовать appsettings.json для настройки поведения распределенного компонента кэширования. Например, этот код настраивает время ожидания подключения через пять секунд и повторите попытку три раза:

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

Вы также можете настроить подключение с помощью встроенных делегатов метода AddRedisDistributedCache() . Этот код настраивает те же свойства, что и предыдущий пример JSON:

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

Подробнее