Поделиться через


Руководство. Реализация кэширования с помощью интеграции .NET.NET Aspire

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

  • Создайте базовое ASP.NET основное приложение, настроенное для использования .NET Aspire.
  • Добавьте .NET Aspire интеграции для подключения к Redis и внедрения кэширования.
  • Настройте интеграцию .NET.NET Aspire в соответствии с конкретными требованиями.

В этой статье рассматривается использование двух различных типов кэширования ASP.NET Core с помощью .NET Aspire и Redis:

  • кэширование выходных данных: настраиваемый расширяемый метод кэширования для хранения всего HTTP-ответа для будущих запросов.
  • распределенное кэширование: кэш, общий для нескольких серверов приложений, который позволяет кэшировать определенные части данных. Распределенный кэш обычно поддерживается как внешняя служба на серверах приложений, к которым он обращается, и может повысить производительность и масштабируемость приложения ASP.NET Core.

Необходимые условия

Для работы с .NET.NET Aspireу вас должны быть установлены следующие компоненты:

Дополнительные сведения см. в разделе .NET.NET Aspire настройки и инструментови .NET.NET Aspire набора средств разработки (SDK).

Создание проекта

  1. В верхней части Visual Studioперейдите к Файл>New Project...>.
  2. В диалоговом окне введите .NET Aspire в поле поиска шаблона проекта и выберите .NET.NET Aspire начальное приложение. Выберите Далее.
  3. На экране Настройка нового проекта:
    • Введите название проекта для AspireRedis.
    • Оставьте rest значений по умолчанию и выберите Далее.
  4. На экране Дополнительные сведения:
    • Убедитесь, что выбран .NET 9.0.
    • Снимите флажок «Использовать Redis для кэширования». Вы реализуете собственную настройку кэширования.
    • Выберите Создать.

Visual Studio создает новое решение .NET Aspire, состоящее из следующих проектов:

  • AspireRedis.Web — проект пользовательского интерфейса Blazor с конфигурациями .NET Aspire по умолчанию.
  • AspireRedis.ApiService — минимальный API с конфигурациями .NET.NET Aspire по умолчанию, которые предоставляют интерфейс с данными.
  • AspireRedis.AppHost — проект оркестратора, предназначенный для подключения и настройки различных проектов и сервисов вашего приложения.
  • AspireRedis.ServiceDefaults — общий проект .NET.NET Aspire для управления конфигурациями, которые используются в разных проектах в вашем решении, связанных с устойчивостью, обнаружением служби телеметрией.

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

  1. Добавьте 📦Aspire. Хостинг.Redis пакет NuGet в проект AspireRedis.AppHost:

    dotnet add package Aspire.Hosting.Redis
    

    Дополнительные сведения см. в статье dotnet add package или управление зависимостями пакетов в .NET приложениях.

  2. Обновите файл Program.cs проекта AspireRedis.AppHost, чтобы он соответствовал следующему коду:

    var builder = DistributedApplication.CreateBuilder(args);
    
    var redis = builder.AddRedis("cache");
    
    var apiservice = builder.AddProject<Projects.AspireRedis_ApiService>("apiservice")
        .WithReference(redis);
    
    builder.AddProject<Projects.AspireRedis_Web>("webfrontend")
        .WithExternalHttpEndpoints()
        .WithReference(apiservice)
        .WithReference(redis);
    
    builder.Build().Run();
    

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

Традиционно можно вручную указать строку подключения Redis в файле appsettings.json проекта:

{
  "ConnectionStrings": {
    "cache": "localhost:6379"
  }
}

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

Настройка пользовательского интерфейса с кэшированием выходных данных

  1. Добавьте пакеты интеграции .NET Aspire Stack Exchange Redis кэширование в приложение AspireRedis.Web:

    dotnet add package Aspire.StackExchange.Redis.OutputCaching
    
  2. В файле Program.cs проекта AspireRedis.WebBlazor добавьте вызов метода расширения var builder = WebApplication.CreateBuilder(args); сразу после строки AddRedisOutputCache.

    builder.AddRedisOutputCache("cache");
    

    Этот метод выполняет следующие задачи:

    • Настраивает кэширование выходных данных ASP.NET Core для использования экземпляра Redis с указанным именем подключения.
    • Автоматически включает соответствующие проверки работоспособности, ведение журнала и телеметрию.
  3. Замените содержимое файла Home.razor проекта AspireRedis.WebBlazor следующим образом:

    @page "/"
    @attribute [OutputCache(Duration = 10)]
    
    <PageTitle>Home</PageTitle>
    
    <h1>Hello, world!</h1>
    
    Welcome to your new app on @DateTime.Now
    

    Интеграция включает атрибут [OutputCache], который кэширует весь отрисованный ответ. Страница также включает в себя вызов @DateTime.Now, чтобы убедиться, что ответ находится в кэше.

Настройка API с помощью распределенного кэширования

  1. Добавьте пакеты интеграции распределенного кэширования Stack Exchange в ваше приложение .

    dotnet add package Aspire.StackExchange.Redis.DistributedCaching
    
  2. В верхней части файла Program.cs добавьте вызов AddRedisDistributedCache:

    builder.AddRedisDistributedCache("cache");
    
  3. В файле Program.cs добавьте следующие инструкции using:

    using System.Text;
    using System.Text.Json;
    using Microsoft.Extensions.Caching.Distributed;
    
  4. В файле Program.cs замените существующий код конечной точки /weatherforecast следующим образом:

    app.MapGet("/weatherforecast", async (IDistributedCache cache) =>
    {
        var cachedForecast = await cache.GetAsync("forecast");
    
        if (cachedForecast is null)
        {
            var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };
            var forecast = Enumerable.Range(1, 5).Select(index =>
            new WeatherForecast
            (
                DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                Random.Shared.Next(-20, 55),
                summaries[Random.Shared.Next(summaries.Length)]
            ))
            .ToArray();
    
            await cache.SetAsync("forecast", Encoding.UTF8.GetBytes(JsonSerializer.Serialize(forecast)), new ()
            {
                AbsoluteExpiration = DateTime.Now.AddSeconds(10)
            }); ;
    
            return forecast;
        }
    
        return JsonSerializer.Deserialize<IEnumerable<WeatherForecast>>(cachedForecast);
    })
    .WithName("GetWeatherForecast");
    

Тестирование приложения локально

Проверьте поведение кэширования приложения, выполнив следующие действия.

  1. Запустите приложение с помощью Visual Studio, нажав клавиши F5.
  2. Если появится диалоговое окно Пуск Docker на рабочем столе, выберите Да, чтобы запустить службу.
  3. Панель мониторинга .NET.NET Aspire загружается в браузере и перечисляет проекты пользовательского интерфейса и API.

Проверьте выходной кэш:

  1. На странице проектов в строке веб-интерфейс щелкните ссылку localhost в столбце Конечные точки, чтобы открыть пользовательский интерфейс приложения.
  2. Приложение отобразит текущее время на домашней странице.
  3. Обновляйте браузер каждые несколько секунд, чтобы увидеть ту же страницу после кэширования. Через 10 секунд срок действия кэша истекает, а страница перезагружается с обновленным временем.

Проверьте распределенный кэш:

  1. Перейдите на страницу Погода на пользовательском интерфейсе Blazor, чтобы загрузить таблицу случайных данных о погоде.
  2. Обновите браузер каждые несколько секунд, чтобы просмотреть те же данные погоды, возвращаемые выходным кэшированием. Через 10 секунд срок действия кэша истекает, и страница перезагружается с обновленными погодными данными.

Поздравляю! Вы настроили приложение ASP.NET Core для использования выходных данных и распределенного кэширования с .NET Aspire.