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

著者: Peter Kellner

キャッシュ タグ ヘルパーは、ASP.NET Core アプリの内容を内部 ASP.NET Core キャッシュ プロバイダーにキャッシュすることによって、アプリのパフォーマンスを改善する機能を提供します。

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

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

<cache>@DateTime.Now</cache>

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

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

有効

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

enabled によってキャッシュ タグ ヘルパーで囲まれた内容をキャッシュするかどうかが決定されます。 既定値は、true です。 false に設定すると、作成された出力はキャッシュされません

例:

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

expires-on

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

expires-on によって、特定の日時でキャッシュされた項目の有効期限を設定します。

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

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

expires-after

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

expires-after では、最初の要求があってから内容をキャッシュしている時間の長さが設定されます。

例:

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

Razor ビュー エンジンでは、expires-after の既定値が 20 分に設定されます。

expires-sliding

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

ここで設定した時間だけキャッシュ エントリの値に対するアクセスがなかった場合、キャッシュ エントリを削除します。

例:

<cache expires-sliding="@TimeSpan.FromSeconds(60)">
    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 には、リストのいずれかのキーの値が変化したときにキャッシュの更新をトリガーする、クエリ文字列 (Query) の Keys のコンマ区切り値リストを指定します。

次の例では、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>
属性の種類
String .AspNetCore.Identity.Application.AspNetCore.Identity.Application,HairColor

vary-by-cookie には、cookie 値が変化したときにキャッシュの更新をトリガーする、コンマで区切った cookie 名のリストを指定します。

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

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

vary-by-user

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

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 の有効期限が切れた場合の匿名状態のために、キャッシュは保持されます。 ユーザーが認証されない場合、キャッシュは保持されます。

vary-by

属性の種類
String @Model

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

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

アクション:

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>

priority

属性の種類 既定値
CacheItemPriority High, Low, NeverRemove, Normal Normal

priority により、組み込みのキャッシュ プロバイダーにキャッシュ削除ガイダンスを提供します。 Web サーバーは、メモリ不足になると、Low キャッシュ エントリを最初に削除します。

例:

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

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

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

その他のリソース