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

Завершено

Создание HTML,возвращенного клиенту для сложного запроса, может занять некоторое время и требовать запросов к нескольким микрослужбам. Этот HTML-код или другой выходной код является общим кандидатом для кэширования.

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

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

Что такое кэш выходных данных?

Используйте кэш выходных данных, если вы хотите хранить полные HTML-страницы в веб-приложениях или в минимальных API меньшей части выходных данных. Вы получаете оптимальные улучшения производительности путем кэширования страниц, запрашиваемых часто, например домашней страницы вашего приложения.

Настройка кэширования выходных данных в .NET Aspire

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

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

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

dotnet add package Aspire.Hosting.Redis --prerelease

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

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

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

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

В проектах микрослужб добавьте компонент кэширования выходных данных Redis:

dotnet add package Aspire.StackExchange.Redis.OutputCaching

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

Как правило, используемый проект — это микрослужба, которая создает пользовательский интерфейс приложения. Например, это может быть ASP.NET или веб-приложение Blazor или минимальный API. Необходимо добавить кэш выходных данных в приложение, а затем добавить ПО промежуточного слоя в проект следующим образом:

// Add the output cache
builder.AddRedisOutputCache();

// Build the app
var app = builder.Build();

// Add the middleware
app.UseOutputCache();

Кэширование завершенных страниц

Чтобы кэшировать страницу, используйте OutputCache атрибут, например на этой странице Razor:

@page "/"
@attribute [OutputCache(Duration = 10)]

<PageTitle>Welcome to Contoso</PageTitle>

<h1>Welcome to Contoso</h1>

This is our homepage. The time is: @DateTime.Now

Кэширование выходных данных в минимальном API

Минимальный API — это проект, который быстро реализует веб-службу HTTP. Он упрощает работу кода, необходимого для создания API RESTful, избегая формирования шаблонов и ненужных контроллеров. Вместо этого действия и маршруты API объявляются напрямую.

В этом примере возвращается простой ответ, когда пользователь запрашивает идентификатор продукта:

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

app.MapGet("/products/{ProdId}", 
    (int ProdId) => $"The product ID is {ProdId}.");

app.Run();

Чтобы кэшировать этот ответ, вызовите CacheOutput() метод или примените OutputCache атрибут в вызове MapGet :

app.MapGet("/products/{ProdId}", (int ProdId) => $"The product ID is {ProdId}.").CacheOutput();
app.MapGet("/products/{ProdId}", [OutputCache] (int ProdId) => $"The product ID is {ProdId}.");

Подробнее