asp.Netキャッシュ

24476 ワード

一、キャッシュ概念、キャッシュのメリット、タイプ.
キャッシュは1种の空间で时间を交换する技术で、通俗的に言えばあなたの得たデータをメモリの中でしばらく保存して、この短い时间の内にサーバーはデータベースを読み取らないで、あるいは本当のデータの源で、あなたがメモリの中に保存したデータを読み取って、ここであなたはどのようにデータを保存して、どんな様子のデータを保存することができて、时间の设定を保存することができて、実際のデータソースデータが変更されると、サーバは読み取りにばらつきがあるのではないでしょうか.焦らないで、次はゆっくり話します.の
キャッシュの利点は、キャッシュはウェブサイトの性能最適化に不可欠なデータ処理メカニズムであり、データベースの圧力を効果的に緩和することができます.例えば、ウェブサイトの毎分のクリック率は100万で、キャッシュの静的ページを使用しなければ、ここにもviewstateがない場合(viewstateは大量の文字列が発生し、サーバのインタラクティブなデータに圧力がかかるので、一般的にページはviewstateを無効にし、キャッシュを採用する)は、ユーザーが一度このページをクリックするだけで、このページは1回データライブラリを読み込むので、データベースに与える圧力は想像できますが、ここでキャッシュを使用すると、キャッシュの有効期間を1分に設定し、すると、この1分以内に100万回クリックするのと、1回クリックするのと同じように、データベースが読み込まれ、データソースがメモリにキャッシュされます.
            asp.Netのキャッシュは主にページキャッシュ,データソースキャッシュ,カスタムデータキャッシュの3つの主要なタイプに分けられる.
二、データキャッシュ
  public partial class WebForm1 : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            //  Cache["date"]=      ;                  

            string datastr = DateTime.Now.ToLongTimeString();

            Response.Write("       :"+datastr+"</br>");  //          ,     ,          。



            if (Cache["date"] == null) //      value  date       

            {

                Cache["date"] = datastr;

                Response.Write("        :"+Cache["date"] + "          ");   //          ,     ,          。

            }

            else

            {

                Response.Write(Cache["date"] + "            ");//           ,     ,         ,    。

            }

        }

    }

上のデータ・キャッシュはキャッシュの有効期限が設定されていないため、最初の出力時間は現在の時間(ページのリフレッシュは変わります)、2番目の出力時間は最初にキャッシュに格納された時間(ページのリフレッシュは変わりません).
次に、データキャッシュに実用的なパラメータ(上コード)を追加します.
        protected void Page_Load(object sender, EventArgs e)

        {

            string ids="";

            Maticsoft.BLL.ScriptsBak bll = new Maticsoft.BLL.ScriptsBak();

            List<Maticsoft.Model.ScriptsBak> list = new List<Maticsoft.Model.ScriptsBak>();

            list = bll.GetAll();

            for (int i = 0; i < list.Count; i++)

            {

                ids += list[i].ScriptId.ToString()+"--";

            }

            ids = ids + " ";  //   ids           id    --          

            if (Cache["key"] == null)

            {

                Cache.Insert("key", ids, null, DateTime.Now.AddSeconds(40), System.Web.Caching.Cache.NoSlidingExpiration);  //        ,      

                //"key"     ,ids       ,null      ,           ,   null,            

                   //null         40 

                  //              ,ASP.NET                    ,       ,

                  //              ,                40 ,40            。 

                Response.Write("cache   ---" + Cache["key"] + "</br>");

            }

            else

            {

                Response.Write("cache   ---" + Cache["key"] + "</br>");

            }

            Response.Write("     ---" + ids + "</br>");

        }

≪データ・キャッシュ|Data Cache|ldap≫:オブジェクト・キャッシュ・セットに時間のかかるエントリを追加し、キー値で格納します.Cache.Insert()メソッドを使用して、キャッシュの期限切れ、優先度、依存項目などを設定できます.
三、ページキャッシュ
 protected void Page_Load(object sender, EventArgs e)

        {

            string date = DateTime.Now.ToString();

            Response.Write(date);

        }
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="cache.WebForm1" %>

<%@ OutputCache Duration="10" VaryByParam="none" %>  

<!---           ,         ,     ,              ,    Page_Load  。

     Page_Load          -->



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <div>

    

    </div>

</body>

</html>

<%@OutputCache Duration="10"VaryByParam="none"%>このコマンドラベルはこのページにキャッシュを追加し、Durationというパラメータはページキャッシュ時間を10秒と指定し、VaryByParamという指定ページパラメータ、つまりこのようにして、例えばこのようなページhttp://www.cnblogs.com/knowledgesea/admin/EditPosts.aspx?postid=2536603&update=1であれば、彼のパラメータはpostidとupdateであり、このようなページでは、コマンドラベルを<%@OutputCache Duration="10"VaryByParam="postid;update"%>パラメータとパラメータの間にセミコロンで区切ることができます.このようにして、個別のページごとにキャッシュされます.彼がキャッシュしているのはpostid=2536603&update=1またはpostid=1&update=2などの異なるパラメータページがすべてキャッシュされます.ここでは、<%@OutputCache Duration="10"VaryByParam="*"%>を使用して、現在のページの下のパラメータが異なるすべてのページをキャッシュする簡単な方法を使用できます.
ASP.NETはページのライフサイクルや関連コードを実行するのではなく、キャッシュされたページを直接使用します.簡単な理解は私の注釈で紹介しています.
四、コントロールキャッシュ
1.ObjectDataSourceのようなデータソースコントロールは、プロパティバーで適切なプロパティを見つけて設定できます.次に、起動キャッシュを設定し、キャッシュ時間を10秒、時間タイプを絶対時間とします.

2.キャッシュ属性のないコントロールをキャッシュする
protected void Page_Load(object sender, EventArgs e)  

        {

            string date = DateTime.Now.ToString();

            TextBox1.Text = date;

        }
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="cache.WebForm1" %>

<%@ OutputCache Duration="10" VaryByControl="TextBox1"%>

<!--VaryByControl          id-->



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

        <div>

            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

        </div>

    </form>

</body>

</html>

ここのTextBoxコントロールにはキャッシュが追加されており、ここでのキャッシュ時間は10秒、つまり10秒以内のASP.NETは、ページのライフサイクルや関連コードを実行するのではなく、キャッシュされたページを直接使用します.
五、キャッシュ依存(詳細:http://www.cnblogs.com/knowledgesea/p/3904929.html)
 
protected void Page_Load(object sender, EventArgs e)  

        {

            string str = "";

            if (Cache["key"] == null)

            {

                str = System.IO.File.ReadAllText(Server.MapPath("TextFile1.txt")); //  TextFile1.txt      

                CacheDependency dp = new CacheDependency(Server.MapPath("TextFile1.txt"));//       dp

                Cache.Insert("key", str, dp);

                Response.Write(Cache["key"]);   //  TextFile1.txt                    ,  TextFile1.txt              TextFile1.txt      

            }

            else

            {

                Response.Write(Cache["key"]);

            }



        }

 
キャッシュ依存性は、キャッシュを他のリソースに依存させ、依存性が変更されると、キャッシュエントリが自動的にキャッシュから削除されます.キャッシュ依存性は、アプリケーションのCache内のファイル、ディレクトリ、または他のオブジェクトとのキーです.ファイルまたはディレクトリが変更されると、キャッシュは期限切れになります.
六、プロファイルにキャッシュを設定する
<system.web>

  <caching>

    <outputCacheSettings>

      <outputCacheProfiles>

     <addname="ProductItemCacheProfile" duration="60"/>

   </outputCacheProfiles>

</outputCacheSettings>

   </caching>

</system.web>
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="cache.WebForm1" %>

<%@ OutputCache CacheProfile="ProductItemCacheProfile" VaryByParam="none" %>

<!--   CacheProfile             -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <div>

    

    </div>

</body>

</html>

これにより、60秒キャッシュされたページがページに追加されます.
七、キャッシュのコールバック関数
 
protected void Page_Load(object sender, EventArgs e)  

        {

            string str = "";

            if (Cache["key"] == null)

            {

                str = System.IO.File.ReadAllText(Server.MapPath("TextFile1.txt")); //  TextFile1.txt      

                CacheDependency dp = new CacheDependency(Server.MapPath("TextFile1.txt"));//       dp

                Cache.Insert("key", str, dp, DateTime.Now.AddSeconds(20), Cache.NoSlidingExpiration, CacheItemPriority.Low, CacheItemRemovedCallback); 

                //CacheItemPriority                  ,                           ,           。

                Response.Write(Cache["key"]);   //  TextFile1.txt                    ,  TextFile1.txt              TextFile1.txt      

            }

            else

            {

                Response.Write(Cache["key"]);

            }



        }



        public void CacheItemRemovedCallback(string key, object value, CacheItemRemovedReason reason) //             ,       Cache.Insert()              ,

            //       ,     Cache.Insert()           ,                     。

        {

            System.IO.File.WriteAllText(Server.MapPath("log.txt"),"       :"+reason.ToString());

        }

 
例のコールバック関数はlogを生成することを書く.txt、ファイルは、キャッシュが除去されるたびに理由を記録する.
八、プロファイルのキャッシュ設定
私达のサーバーはキャッシュを开く机能があって、キャッシュ机能はあなたがウェブサイトにアクセスする时のウェブサイトのサーバーの中のコンパイル时间を减らすことができて、大いにあなたのウェブサイトのアクセス速度を速めて、もしあなたがあなたのウェブサイトに対して频繁に更新する必要があるならば、あなたはしばらくキャッシュ时间を减らすことを考えることができて、あるいはしばらくキャッシュを闭じて下记のコードをウェブサイトに入れてください.configファイルには、Webサイトのルートディレクトリが含まれています.1.web.configではキャッシュを縮小する時間を設定しますので、web.configでは以下の定義を用いる.webServer> 2. ページのcaching機能を閉じる場合は、web.configでは以下の定義で 3. プログラム全体のcaching機能を閉じる場合は、web.configでは以下の定義で 4. ルートディレクトリの1つまたは複数のフォルダのcaching機能を閉じる場合は、web.configでは以下の定義