[천장] ASP.NET 캐시 요약

1. 캐시 개념, 캐시의 장점, 유형.
캐시는 공간으로 시간을 바꾸는 기술이다. 통속적으로 말하면 당신이 얻은 데이터를 메모리에 한동안 저장하는 것이다. 이 짧은 시간 동안 서버는 데이터베이스나 실제 데이터 원본을 읽지 않고 당신이 메모리에 저장한 데이터를 읽는다. 여기에 어떻게 저장 데이터를 설정하고 어떤 데이터를 저장할 수 있는지 의심스럽다.저장 시간의 설정, 실제 데이터 원본 데이터가 서버를 바꾸면 읽기에 편차가 있지 않습니까?서두르지 마라, 다음은 천천히 이야기할 것이다.
캐시의 장점은 캐시가 사이트 성능 최적화에 없어서는 안 될 데이터 처리 메커니즘이다. 그는 데이터베이스 스트레스를 효과적으로 완화시킬 수 있다. 예를 들어 사이트의 분당 조회수가 100만 위안이고 캐시된 정적 페이지를 사용하지 않으면여기에viewstate가 없는 경우(viewstate는 대량의 문자열을 생성하고 서버의 상호작용 데이터에 대한 압력이 있기 때문에 일반 페이지는viewstate를 사용하지 않고 캐시를 사용한다) 사용자가 이 페이지를 한 번만 클릭하면 이 페이지는 데이터 라이브러리를 한 번 읽을 수 있다. 이렇게 하면 데이터베이스에 압력을 가할 수 있다. 만약에 우리가 캐시를 사용한다면캐시 유효기간을 1분으로 설정하면 1분 동안 100만 번의 클릭과 한 번의 클릭은 똑같다. 모두 데이터베이스를 한 번 읽고 데이터 원본은 메모리에 캐시된다.
            asp.net의 캐시는 주로 페이지 캐시, 데이터 원본 캐시, 사용자 정의 데이터 캐시 등 세 가지 주요 유형으로 나뉜다.
2. 데이터 캐시
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"] + "            ");//           ,     ,         ,    。
            }
        }
    }

위의 데이터 캐시는 캐시 만료 시간을 설정하지 않았기 때문에 첫 번째 출력 시간은 현재 시간(페이지를 새로 고치면 변경), 두 번째 출력 시간은 첫 번째 캐시 저장 시간(페이지를 새로 고치면 변경되지 않음)이다.
다음은 데이터 캐시에 실용적인 매개 변수 (위 코드) 를 추가합니다.
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>");
        }

데이터 캐시: 시간을 소모하는 항목을 대상 캐시 집합에 넣고 키 값으로 저장합니다.우리는 Cache.Insert() 방법을 사용하여 캐시의 만료, 우선 순위, 의존 항목 등을 설정할 수 있다.
3. 페이지 캐시
 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와 업데이트입니다. 만약에 이 페이지에 명령 라벨을 <%@ OutputCache Duration ='10'VaryByParam ='postid; 업데이트 '%> 매개 변수와 매개 변수 사이를 분호로 구분할 수 있다면 각각의 단독 페이지가 캐시됩니다.그가 캐시한 것은postid=253603 &update=1 또는postid=1 &update=2 등 서로 다른 매개 변수 페이지를 모두 캐시하는 것이다.<%@ OutputCache Duration = "10"VaryByParam = "*"%>를 사용하여 현재 페이지의 매개 변수가 다른 모든 페이지를 캐시할 수 있습니다.
ASP.NET는 페이지의 생명주기와 관련 코드를 실행하지 않고 캐시된 페이지를 직접 사용합니다. 간단하게 이해하면 제 주석에서 소개한 것입니다.
4. 컨트롤 캐시
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는 더 이상 페이지의 생명주기와 관련 코드를 실행하지 않고 캐시된 페이지를 직접 사용합니다.
5. 캐시 의존성
 
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에 있는 파일, 디렉터리, 또는 다른 대상의 키가 될 수 있습니다.파일이나 디렉터리가 바뀌면 캐시가 만료됩니다.
6. 프로필에 캐시 설정
<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초 캐시된 페이지를 추가합니다.
7. 캐시 리셋 함수
 
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());
        }

예에서 리셋 함수는 로그를 생성하는 것을 쓴다.txt, 파일은 캐시가 제거되는 원인을 기록합니다.
저자:정모씨출처:http://jsonzheng.cnblogs.com전재나 공유를 환영하지만, 반드시 글의 출처를 성명해 주십시오.만약 글이 당신에게 도움이 된다면, 당신이 추천하거나 관심을 가져 주시기를 바랍니다.

좋은 웹페이지 즐겨찾기