ASPを使います.NETキャッシュのSQLデータキャッシュ依存(SqlCacheDependency)

5101 ワード

【名詞解釈】
キャッシュ(Cache)依存,大白話はキャッシュが更新するかどうかが他のObjectに依存するかどうかを説明する.では、SqlCacheDependencyとは、Cacheのデータ更新がSQL Serverデータベーステーブルの変化(行レベルの変更)またはSQLクエリ結果の変化に依存することを意味します.
以前にもキャッシュの使用についてまとめました
ページ出力キャッシュ:ASPを使います。NETキャッシュのOutputCache
データ・キャッシュ:ASPを使います。NETキャッシュのデータキャッシュ
しかし,キャッシュ依存性はまだ曖昧であり,この間はプロジェクトで実際に運用された.今、自分の実際とネット上の大牛との経験を結びつけて、みんなに分かち合います.
【使用背景】
まずASPを使わなければなりませんNetとSQL Server開発アプリケーション、すなわちSqlCacheDependencyはマイクロソフトの体制に基づいている.同級生、もしあなたがNet開発に従事していないなら、まずいいねをあげてからSkipしましょう.
キャッシュは、アプリケーションのパフォーマンスを向上させ、サーバの圧力を低減するために使用されます.データが変わりにくく、データが通用しやすいシナリオに適しており、動的クエリーデータ、例えばデータ分析ではキャッシュの使用を放棄することが望ましい.
【私のコード】
SqlCacheDependencyは、SQL Serverの通信メカニズムを利用して、データテーブルが変化したときにアプリケーションに通知するときに既存のキャッシュを削除し、新しいデータを更新すると一般的に言われています.
まず、SqlServerがService Brokerを有効にしているかどうかを確認する必要があります.
Select DATABASEpRoPERTYEX('データベース名','IsBrokerEnabled')--1は0が有効になっていることを示し、有効になっていないことを示します
文の有効化
ALTER DATABASEデータベース名SET ENABLE_BROKER;    
有効な文を実行すると、偽の死が発生します.大丈夫です.クエリーを停止し、もう一度クエリーすればいいです.
これらはネット上の経験から来ており、個人的には実際にはこれらの状況は現れず、状態=0であり、依然として使用することができる.私はSQL Server 2008を使用していますが、個人的には高バージョンのSql Serverはもうこれらを必須条件としていないと思います(個人的な観点、意見、議論を歓迎します).結局Net開発はバカ化プログラミングの道を歩んでいる.
次に、データベース・キャッシュ通知を構成します.2つの方法(MSDN)は、個人的に2つ目の方法を推奨します.
第1の利用aspnet_regsql.Exce(WindowsMicrosoft.NETFramework[バージョン]フォルダ)ツールは、データベースとテーブルのキャッシュ通知機能を構成します.次のコマンドを覚えておくだけで開きます.
aspnet_regsql -S localhost -E -d RWWW -ed -t Options -et
各コマンドはどんな意味を表しているのか、ネット上で詳しく説明されています.興味のある学生は理解することができます.コマンドを実行すると、構成できます.ここでは特に大文字と小文字に注意する必要があります.筆者は開発中に表名をすべて大文字にしましたが、結果として1時間もかかり、プログラムは常に実行できず、エラーを報告し続け、SQLキャッシュ通知のためにデータベースを有効にしていないことを示しました.結局、大文字と小文字が間違っていることに気づいた.
2つ目はSqlCacheDependencyAdminクラスを利用することです
SqlCacheDependencyAdmin.EnableNotifications(connectionString);//データベースのデータキャッシュ依存機能の起動
SqlCacheDependencyAdmin.EnableTableForNotifications(connectionString, table);//データテーブルキャッシュの有効化
この2行のコードをGlobalのStartメソッドに入れます.
次にプロファイルを構成します.

      
      
        
          
        

      
    

ここでは基本的に固定フォーマットですが、このように構成しなければなりません.
最後にキャッシュをコードに入れればいいです.くだらないことは言わないで、直接コードに行きます.開発にはEFを用いた. 
//       
                if (System.Web.HttpContext.Current.Cache["Link"] == null)
                {
                    //             
                    var links = db.WWW_Link.AsQueryable();
                    //      
                    System.Web.HttpContext.Current.Cache.Insert(
                        "Link",
                        links,
                        new SqlCacheDependency("WWWAccount", "WWW_Link")
                        );
                    //    
                    return links;
                }
                //             
                return System.Web.HttpContext.Current.Cache["Link"] as IQueryable<WWW_Link>;

テーブルWWW_Linkが変化するとCache[Link]が自動的に更新されます.ここでSqlCacheDependencyの最初のパラメータを考えます.これはAppに等しいです.config中ノードname=WWWAccount.