次の方法で共有


ASP.NET Core MVC のキャッシュ タグ ヘルパー

ピーター・ケルナー

キャッシュ タグ ヘルパーは、内部 ASP.NET Core キャッシュ プロバイダーにコンテンツをキャッシュすることで、ASP.NET Core アプリのパフォーマンスを向上させる機能を提供します。

タグヘルパーの概要については、ASP.NET Core の「タグヘルパー」を参照してください。

次の Razor マークアップは、現在の日付をキャッシュします。

<cache>@DateTime.Now</cache>

タグ ヘルパーを含むページへの最初の要求には、現在の日付が表示されます。 追加の要求は、キャッシュの有効期限が切れるまで (既定では 20 分)、キャッシュされた日付がキャッシュから削除されるまで、キャッシュされた値を表示します。

キャッシュ タグ ヘルパー属性

expires-after

属性の種類 Example 既定値
TimeSpan @TimeSpan.FromSeconds(120)

expires-after は、コンテンツをキャッシュする最初の要求時刻からの時間の長さを設定します。

例:

<cache expires-after="@TimeSpan.FromSeconds(120)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

enabled

属性の種類 例示 既定値
ブール値 truefalse true

enabled は、キャッシュ タグ ヘルパーで囲まれたコンテンツがキャッシュされるかどうかを決定します。 既定値は trueです。 falseに設定すると、レンダリングされた出力はキャッシュされません

例:

<cache enabled="true">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

expires-on

属性の種類 Example
DateTimeOffset @new DateTime(2025,1,29,17,02,0)

expires-on は、キャッシュされた項目の絶対有効期限を設定します。

次の例では、2025 年 1 月 29 日午後 5 時 20 分までキャッシュ タグ ヘルパーの内容をキャッシュします。

<cache expires-on="@new DateTime(2025,1,29,17,02,0)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

expires-sliding

属性の種類 Example
TimeSpan @TimeSpan.FromSeconds(60)

キャッシュ エントリの値にアクセスしていない場合に削除する時間を設定します。

例:

<cache expires-sliding="@TimeSpan.FromSeconds(60)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

expires-afterexpires-onが定義されていない場合、既定値は 30 秒です。

priority

属性の種類 例示 既定値
CacheItemPriority HighLowNeverRemoveNormal Normal

priority は、組み込みのキャッシュ プロバイダーにキャッシュ削除ガイダンスを提供します。 メモリ圧迫の際、Web サーバーは最初にキャッシュエントリを削除します。

例:

<cache priority="High">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

priority属性では、特定のレベルのキャッシュリテンション期間は保証されません。 CacheItemPriority は単に提案です。 この属性を NeverRemove に設定しても、キャッシュされた項目が常に保持されるとは限りません。 詳細については、「 その他のリソース 」セクションのトピックを参照してください。

キャッシュ タグ ヘルパーは、 メモリ キャッシュ サービスに依存します。 キャッシュ タグ ヘルパーは、サービスが追加されていない場合に追加します。

vary-by

属性の種類 Example
String @Model

vary-by では、キャッシュされるデータをカスタマイズできます。 属性の文字列値によって参照されるオブジェクトが変更されると、キャッシュ タグ ヘルパーの内容が更新されます。 多くの場合、モデル値の文字列連結がこの属性に割り当てられます。 実質的に、これにより、連結された値のいずれかに対する更新によってキャッシュが無効になるシナリオが発生します。

次の例では、ビューをレンダリングするコントローラー メソッドが 2 つのルート パラメーター ( myParam1myParam2) の整数値を合計し、その合計を単一のモデル プロパティとして返すものとします。 この合計が変更されると、キャッシュ タグ ヘルパーのコンテンツがレンダリングされ、再びキャッシュされます。

アクション:

public IActionResult Index(string myParam1, string myParam2, string myParam3)
{
    int num1;
    int num2;
    int.TryParse(myParam1, out num1);
    int.TryParse(myParam2, out num2);
    return View(viewName, num1 + num2);
}

Index.cshtml:

<cache vary-by="@Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
属性の種類 例示
String .AspNetCore.Identity.Application.AspNetCore.Identity.Application,HairColor

vary-by-cookieは、cookie値が変更されたときにキャッシュ更新をトリガーするcookie名のコンマ区切りリストを受け取ります。

次の例では、ASP.NET Core cookieに関連付けられているIdentityを監視します。 ユーザーが認証されると、 Identitycookie の変更によってキャッシュの更新がトリガーされます。

<cache vary-by-cookie=".AspNetCore.Identity.Application">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-culture

属性の種類 例示 既定値
ブール値 truefalse false

vary-by-culture は、要求カルチャによってキャッシュされた結果を変更します。 属性を true に設定すると、結果は CultureInfo.CurrentCultureCultureInfo.CurrentUICultureによって変化します。

例:

<cache vary-by-culture="true">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-header

属性の種類 例示
String User-AgentUser-Agent,content-encoding

vary-by-header は、変更時にキャッシュの更新をトリガーするヘッダー値のコンマ区切りのリストを受け取ります。

次の例では、ヘッダー値 User-Agentを監視します。 この例では、Web サーバーに表示されるすべての異なる User-Agent のコンテンツをキャッシュします。

<cache vary-by-header="User-Agent">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-query

属性の種類 例示
String MakeMake,Model

vary-by-queryは、リストされているキーの値が変更されたときにキャッシュ更新をトリガーするクエリ文字列 (Keys) 内のQueryのコンマ区切りのリストを受け取ります。

次の例では、 MakeModelの値を監視します。 この例では、Web サーバーに提示されたさまざまなMakeModelごとにコンテンツをキャッシュします。

<cache vary-by-query="Make,Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-route

属性の種類 例示
String MakeMake,Model

vary-by-route は、ルート データ パラメーター値が変更されたときにキャッシュ更新をトリガーするルート パラメーター名のコンマ区切りのリストを受け取ります。

例:

Startup.cs:

routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{Make?}/{Model?}");

Index.cshtml:

<cache vary-by-route="Make,Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-user

属性の種類 例示 既定値
ブール値 truefalse false

vary-by-user は、サインインしているユーザー (またはコンテキスト プリンシパル) が変更されたときにキャッシュをリセットするかどうかを指定します。 現在のユーザーは要求コンテキスト プリンシパルとも呼ばれ、Razorを参照することで@User.Identity.Name ビューで表示できます。

次の例では、現在ログインしているユーザーを監視してキャッシュの更新をトリガーします。

<cache vary-by-user="true">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

この属性を使用すると、サインインとサインアウトのサイクルを通じてコンテンツがキャッシュに保持されます。 値が trueされると、認証サイクルによって、認証されたユーザーのキャッシュが無効になります。 ユーザーの認証時に新しい一意の cookie 値が生成されるため、キャッシュは無効になります。 キャッシュは、 cookie が存在しないか、 cookie の有効期限が切れている場合に匿名状態に維持されます。 ユーザーが認証 されていない 場合、キャッシュは維持されます。

その他のリソース