次の方法で共有


チュートリアル: .NET.NET Aspire 統合を使用してキャッシュを実装する

多くの場合、クラウドネイティブ アプリでは、パフォーマンスを向上させるために、さまざまな種類のスケーラブルなキャッシュ ソリューションが必要です。 .NET Aspire 統合により、Redisなどの一般的なキャッシュ サービスに接続するプロセスが簡略化されます。 この記事では、次の方法について説明します。

  • ASP.NETを使用するように設定された基本的な .NET Aspire コア アプリを作成します。
  • .NET Aspire 統合を追加して、Redis に接続し、キャッシュを実装します。
  • 特定の要件を満たすように .NET.NET Aspire 統合を構成します。

この記事では、ASP.NET Core と .NET Aspireを使用して 2 種類の Redis キャッシュを使用する方法について説明します。

  • 出力キャッシュ: 将来の要求に対して HTTP 応答全体を格納するための、構成可能で拡張可能なキャッシュ方法です。
  • 分散キャッシュ: 特定のデータをキャッシュできる複数のアプリ サーバーによって共有されるキャッシュ。 分散キャッシュは通常、アクセスするアプリ サーバーの外部サービスとして保持され、ASP.NET Core アプリのパフォーマンスとスケーラビリティを向上させることができます。

前提 条件

.NET .NET Aspireを使用するには、次のものがローカルにインストールされている必要があります。

詳細については、 セットアップとツールの、および SDK を参照してください。

プロジェクトを作成する

  1. Visual Studioの上部にある [ファイル]>[新しい>プロジェクト]...に移動します。
  2. ダイアログ ウィンドウで、プロジェクト テンプレートの検索ボックスに「」と入力し、[スタート アプリケーション 選択します。 [次 ] を選択します。
  3. [新しいプロジェクトの構成] 画面で、次の手順を実行します。
    • のプロジェクト名 を入力
    • 値の は既定値のままにし、[次へ]選択します。
  4. 追加情報 画面で、次の手順を実行します。
    • .NET 9.0 が選択されていることを確認します。
    • キャッシュに を使用する] チェック ボックスをオフにします。 独自のキャッシュ設定を実装します。
    • [作成] を選択します。

Visual Studio は、次のプロジェクトで構成される新しい .NET Aspire ソリューションを作成します。

  • AspireRedis.Web - 既定の Blazor 構成を持つ .NET Aspire UI プロジェクト。
  • AspireRedis.ApiService - フロントエンドにデータを提供する既定の .NET.NET Aspire 構成を持つ最小限の API。
  • AspireRedis.AppHost - アプリのさまざまなプロジェクトとサービスを接続して構成するように設計されたオーケストレーター プロジェクトです。
  • AspireRedis.ServiceDefaults - ソリューション内のプロジェクト全体で再利用される構成を管理するための 共有プロジェクトで、回復性、サービス検出、テレメトリ関連します。

App Host プロジェクトを構成する

  1. AspireRedis.AppHost します。

    dotnet add package Aspire.Hosting.Redis
    

    詳細については、「dotnet パッケージ の追加」または「.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 コンテナー インスタンスを作成し、出力キャッシュと分散キャッシュの両方でインスタンスを自動的に使用するように UI と API を構成します。 また、このコードでは、サービス検出を使用してフロントエンド UI とバックエンド API の間の通信を構成します。 .NET .NET Aspireの暗黙的なサービス検出により、サービス接続の設定と管理が合理化され、開発者の生産性が向上します。 このチュートリアルのコンテキストでは、この機能を使用すると、Redisに接続する方法が簡略化されます。

従来は、各プロジェクトの Redis ファイルで appsettings.json 接続文字列を手動で指定しました。

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

このメソッドを使用して接続文字列を構成するには、機能しながら、複数のプロジェクト間で接続文字列を複製する必要があります。この場合、煩雑でエラーが発生しやすくなります。

出力キャッシュを使用して UI を構成する

  1. .NET Aspire アプリに AspireRedis.Web 統合パッケージを追加します。

    dotnet add package Aspire.StackExchange.Redis.OutputCaching
    
  2. Program.cs AspireRedis.Web プロジェクトの Blazor ファイルで、var builder = WebApplication.CreateBuilder(args);行の直後に、AddRedisOutputCache 拡張メソッドの呼び出しを追加します。

    builder.AddRedisOutputCache("cache");
    

    このメソッドは、次のタスクを実行します。

    • 指定された接続名を持つ ASP.NET Core インスタンスを使用して Redis 出力キャッシュを構成します。
    • 対応する正常性チェック、ログ記録、テレメトリを自動的に有効にします。
  3. AspireRedis.Web プロジェクトの Blazor ファイルの内容を次のように置き換えます。

    @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. .NET Aspire Stack Exchange Redis 分散キャッシュ 統合パッケージを AspireRedis.ApiService アプリに追加します。

    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. F5キー 押して、 を使用してアプリを実行します。
  2. [Docker デスクトップ 開始] ダイアログが表示されたら、[はい] を選択してサービスを開始します。
  3. .NET .NET Aspire ダッシュボードがブラウザーに読み込み、UI プロジェクトと API プロジェクトが一覧表示されます。

出力キャッシュをテストします。

  1. [プロジェクト] ページの [webfrontend] 行で、[localhost 列の リンクをクリックして、アプリの UI を開きます。
  2. アプリケーションは、ホーム ページに現在の時刻を表示します。
  3. ブラウザーを数秒ごとに更新して、出力キャッシュによって返されたのと同じページを表示します。 10 秒後にキャッシュの有効期限が切れ、ページが更新された時刻で再読み込みされます。

分散キャッシュをテストします。

  1. UI の Blazor ページに移動して、ランダム化された気象データのテーブルを読み込みます。
  2. ブラウザーを数秒ごとに更新して、出力キャッシュによって返されるのと同じ気象データを確認します。 10 秒後にキャッシュの有効期限が切れ、ページが更新された気象データで再読み込みされます。

おめでとうございます! ASP.NET Coreで出力と分散キャッシュを使用するように .NET Aspire アプリを構成しました。