状態管理

概要

ASP.NET には、キャッシュ制御を容易にするための方法

  • @ OutputCache ディレクティブを使用すると、ASP.NET でページの出力キャッシュを制御できます。
  • HttpCachePolicy クラスを使用すると、データセットなどの任意のオブジェクトをサーバーのメモリに格納できます。
  • Cache-Control HTTP ヘッダーを使用して、キャッシュを制御することもできます。

キャッシュ以下のところに格納できます。

  • クライアントのブラウザ
  • プロキシ サーバー
  • IIS サーバー

出力キャッシュ

従来では、異なるパラメータでも同じURLなら、ひとつのキャッシュに保存、ASP.NET では、同じURLでも異なるパラメータなら、別々のキャッシュに保存する

フラグメントキャッシュ

ページの一部(フラグメント)のみキャッシュする

データキャッシュ

データをサーバーのメモリから直接に読み込めます。

データベースキャッシング

キャッシュの作成元となっているテーブル(データベース)に変更があったタイミングでキャッシュデータをリフレッシュする機能。データベースキャッシングを利用することで、データソースは更新されたのにキャッシュは古い情報のまま残ってしまう、といったようなデータの不整合を解消することができます。

※定期的に現在のキャッシュとデータベースと照合して、キャッシュデータを最新にする方法で、キャッシュが最新のことを保証しますので、頻繁にリフレッシュすると、ためメモリ・リソースを浪費する分、キャッシュの効果は得にくいです。

一般的に以下の場合に、データキャッシュを利用する

  • 更新頻度が少ない(あるいは原則的に更新がない)データ
  • サイズが大きくないデータ
  • アクセス頻度が多いデータ

データベース上でキャッシュ機能を有効にする

aspnet_regsql.exe -S .\SQLEXPRESS -E -d [データベース名] -ed
aspnet_regsql.exe -S .\SQLEXPRESS -E -d [データベース名] -t Album -et 

Web.config の設定

<system.web>
  <caching>
    <sqlCacheDependency enabled="true" pollTime="5000">
      <databases>
        <add name="MyCache" connectionStringName="MyDBCache" />
      </databases>
    </sqlCacheDependency>
  </caching>

pollTime属性は、キャッシュ対象のテーブルに対して変更を確認する時間間隔をミリ秒単位で指定します。デフォルトは1分で、500ミリ秒未満の設定はできません。

<%@ OutputCache Duration="120" VaryByParam="None" SqlDependency="MyCache:[対象テーブル]" %>

依存関係

時間依存

  • 絶対時刻
     絶対時刻を設定します。たとえば、Cache エントリに現在の時刻 + 10 分を有効期限として設定します。
  • 経過時間
     Cache 内のアイテムで、要求ごとに有効期限を再設定します。たとえば、指定するオブジェクトを10分に設定、10分以内にアクセスがあれば、オブジェクトがさらに10分間キャッシュに保存んします。

経過時間 有効期限オプションを使用して、最長 10 分間 ProductData DataSet を Cache に保存できます。ProductData への要求が 10 分以内に行われる限り、データはさらに 10 分間有効になります。

' 10 分間の時間間隔
Dim span As New TimeSpan(0,10,0)
Cache.Insert("ProductData", LoadDataSet(), nothing, nothing, span)

ファイル依存

ファイルのデータを読み込んで、Cacheに保存する際に、ファイルの中身が変更されたら、Cacheが無効になります。

Dim dependency as new CacheDependency(Server.MapPath("product.xml"))
Cache.Insert("ProductData", dom, dependency)

キー依存

複数のオブジェクトA、B、Cを別々キーでCacheに格納している場合、A、B、Cは依存関係があり、A、B、Cいずれのオブジェクトの値が変更されたら、その他の二つのキャッシュも無効になります。

Dim dependency (1) As String
dependencyKey(0) = "ProductData"
Dim productDataDependency As new CacheDependency(nothing, dependencyKey)

Cache.Insert("SalesData", LoadDataSet("Sales"), productDataDependency)

まとめ

Cacheオブジェクトを利用する前に常にオブジェクトが存在するかどうかを確認する

Public Function GetProductData() As DataSet
  If (IsNothing(Cache("ProductData")) Then
    Cache("ProductData") = LoadDataSet()

  Return Cache("ProductData")
End Function


ウィジェット型CM動画配信サービス manna [マナ]

コメント:



(画像の文字列を入力して下さい)

トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:32:45 (1628d)

PCpዾyǗlgĂ܂}WŔ܂z 萔O~ył񂫁z Yahoo yV NTT-X Store

z[y[W ̃NWbgJ[h COiq ӂ邳Ɣ[ COsیI COze