Asp.Netデータベースキャッシュ依存

4757 ワード

1.データベースのキャッシュ依存を有効にします(管理権限が必要な場合、またはアカウントとパスワードを管理する必要があります).
「Visual Studioコマンドプロンプト(2010(ここでは2010バージョンを使用していますが、VS 2005を使用できます)」でaspnet_を実行します.regsql
(MSSQL 2000の有効化方法は若干異なります)
aspnet_regsql.exe -S Excel-lang -U sa -P sa -ed -d TestDB -et -t UserInfo
または
aspnet_regsql -C "data source=Excel-lang;initial catalog=TestDB;user id=sa;password=sa"-ed -et -t "UserInfos"
注意:1.データベースサーバ名はExcel-lang 2.ユーザとパスワードはsa 3.データベースとテーブルは、それぞれTestDB UserInfoの実行が完了すると、データベースの下にテーブルAspNet_が生成されます.SqlCacheTablesForChangeNotificationとトリガ
2.データベースがリスニングサービスを有効にしているかどうかを確認する
Select DataBasePropertyex('TestDB','IsBrokerEnabled')
または
SELECT is_broker_enabled FROM sys.databases WHERE name = 'TestDB'
(1は有効、0は無効)
有効になっていない場合
使用文ALTER DATABASE TestDB SET ENABLE_BROKER;リスニングサービスの有効化
有効化に失敗したり、長い間実行していたりした場合は、文を実行します.
ALTER DATABASE TestDB SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE TestDB SET ENABLE_BROKER;
3.WebConfigの構成
ノードでの構成
 
 ノードの下での構成
                                          
各ノードの属性はMSDN関連ドキュメントを参照してください
4.ページのロード時に次のコードを実行し、データベースからデータを取得してキャッシュに入れる
        List<UserInfo> list = DataCache.GetCache("UserInfoCache") as List<UserInfo>;

        if (list == null)

        {

            System.Web.Caching.SqlCacheDependency dep = new System.Web.Caching.SqlCacheDependency("TestDB", "UserInfo");

            list = userManger.GetUserLoginList();

            onMoveBack = new CacheItemRemovedCallback(RemovedCallback);

            DataCache.SetCache("UserInfoCache", list, dep, onMoveBack);

        }


5.キャッシュが失効したことを明らかにする関数
   CacheItemRemovedCallback onMoveBack;

    private void RemovedCallback(String k, Object v, CacheItemRemovedReason r)

    {

        onMoveBack = new CacheItemRemovedCallback(RemovedCallback);

        System.Web.Caching.SqlCacheDependency dep = new System.Web.Caching.SqlCacheDependency("TestDB", "UserInfo");

        List<UserInfo> list = userManger.GetUserLoginList();//         

      DataCache.SetCache("UserInfoCache", list, dep,onMoveBack);

    }


6.DataCacheクラス
using System;

using System.Collections.Generic;

using System.Text;

using System.Web;

using System.Data;

using System.Data.SqlClient;

using System.Web.Caching;



public class DataCache

{

    /// <summary> 

    ///           CacheKey Cache  

    /// </summary> 

    /// <param name="CacheKey"></param> 

    /// <returns></returns> 

    public static object GetCache(string CacheKey)

    {

        System.Web.Caching.Cache objCache = HttpRuntime.Cache;

        return objCache[CacheKey];

    }

    /// <summary> 

    ///           CacheKey Cache  

    /// </summary> 

    /// <param name="CacheKey"></param> 

    /// <param name="objObject"></param> 

    public static void SetCache(string CacheKey, object objObject)

    {

        System.Web.Caching.Cache objCache = HttpRuntime.Cache;

        objCache.Insert(CacheKey, objObject);

    }

    /// <summary> 

    ///                

    /// </summary> 

    /// <param name="CacheKey">  </param> 

    /// <param name="objObject">    </param> 

    /// <param name="dep">     </param> 

    /// <param name="onMoveCallBack">             </param> 

    public static void SetCache(string CacheKey, object objObject, System.Web.Caching.CacheDependency dep, CacheItemRemovedCallback onMoveCallBack)

    {

        System.Web.Caching.Cache objCache = HttpRuntime.Cache;

        objCache.Insert(

        CacheKey,

        objObject,

        dep,

        System.Web.Caching.Cache.NoAbsoluteExpiration,//     

        System.Web.Caching.Cache.NoSlidingExpiration,//       

        System.Web.Caching.CacheItemPriority.Default,

        onMoveCallBack

        );

    }

}

7.実行手順:データベースからデータを照会→キャッシュへの追加(失効ポリシーと失効コールバック関数の設定)→失効時→失効コールバック関数の実行
RemovedCallback→データを再照会してキャッシュに入れる.
キャッシュ依存Yes