ASP.NET 캐 시 소개

8532 단어 ASP.NET 캐 시
ASP.NET 캐 시

소개 하 다.
캐 시 는 메모리 에 데 이 터 를 저장 하 는 기술 이자 ASP.NET 에서 제공 하 는 중요 한 특성 중 하나 입 니 다.예 를 들 어 복잡 하 게 조회 할 때 데 이 터 를 캐 시 할 수 있 습 니 다.그러면 나중에 요청 할 때 데이터 베 이 스 를 찾 지 않 고 캐 시 에서 직접 가 져 올 수 있 습 니 다.캐 시 를 사용 하면 프로그램의 성능 을 향상 시 킬 수 있 습 니 다.
주로 두 가지 유형의 캐 시 가 있 습 니 다.
출력 캐 시 출력 캐 싱\\
데이터 캐 시 데이터 캐 싱
1.출력 캐 시(출력 캐 시)
출력 캐 시 를 사용 하면 마지막 으로 출력 한 HTML 페이지 를 캐 시 할 수 있 습 니 다.같은 페이지 가 다시 요청 할 때 ASP.NET 은 페이지 의 생명주기 와 관련 코드 를 실행 하지 않 고 캐 시 된 페이지 를 직접 사용 합 니 다.문법 은 다음 과 같 습 니 다
 
<%@ OutputCache Duration=”60” VaryByParam=”None” %>
Duration 속성 설정 페이지 는 60 묘 로 캐 시 됩 니 다.모든 사용자 요청 은 캐 시 되 며 버퍼 링 60 초 동안 같은 요청 은 캐 시 페이지 를 직접 사용 합 니 다.캐 시가 만 료 되면 ASP.NET 은 페이지 코드 를 다시 실행 하고 다음 60 초 에 새로운 HTML 캐 시 를 만 듭 니 다
 
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="OutputCachingTest.aspx.cs" Inherits="OutputCachingTest" Title="Page" %>
<%@ OutputCache Duration="20" VaryByParam="None" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<div class="title">Output Cache</div>
Date: <asp:Label ID="lblDate" runat="server" Text="" />
Time: <asp:Label ID="lblTime" runat="server" Text="" />
</asp:Content>
protected void Page_Load(object sender, EventArgs e)
{
lblDate.Text = DateTime.Now.ToShortDateString();
lblTime.Text = DateTime.Now.ToLongTimeString();
}
이 예 에서 페이지 는 20 초 동안 캐 시 됩 니 다.검색 문자열 캐 시(Cache by Query String)를 통 해 실제 응용 프로그램 에서 페이지 는 일부 매개 변수 에 따라 페이지 의 내용 을 동적 으로 변경 합 니 다.페이지 가 검색 문자열 을 통 해 정 보 를 얻 을 수 있다 면 검색 문자열 에 따라 쉽게 캐 시 페이지 를 복사 할 수 있 습 니 다.VarByParam="None"는 ASP.NET 을 캐 시 페이지 의 복사 본 하나만 저장 하도록 지정 합 니 다.VarByParam="*"ASP.NET 은 검색 문자열 에 따라 캐 시 페이지 를 저장 합 니 다
 
<%@ OutputCache Duration="60" VaryByParam="*" %>
<div align="right">
<a href="OutputCachingTest2.aspx">No Query String</a> |
<a href="OutputCachingTest2.aspx?id=1">ID 1</a> |
<a href="OutputCachingTest2.aspx?id=2">ID 2</a> |
<a href="OutputCachingTest2.aspx?id=3">ID 3</a> |
<a href="OutputCachingTest2.aspx?id=3&langid=1">ID 3</a>
</div>
위의 예 에서 검색 문자열 에 서로 다른 ID.ASP.NET 은 모든 ID 에 단독 캐 시 페이지 를 저장 합 니 다.이런 방식 은 검색 문자열 의 범위 가 매우 넓 을 때 문제 가 있 을 수 있다.이 때 우 리 는 VarByParam 속성 에서 중요 한 검색 문자열 변수의 이름 을 지정 할 수 있 습 니 다.다음 과 같 습 니 다
 
%@OutputCacheDuration="60"VaryByParam="id;langid"%
사용자 정의 캐 시(Custom Caching)도 사용자 정의 프로그램 을 만들어 페이지 를 캐 시 할 수 있 습 니 다.ASP.NET 은 사용자 정의 캐 시 를 만 드 는 편리 한 방법 을 제공 합 니 다.VarByCustom 속성 을 사용 하여 사용자 정의 캐 시 형식의 이름 을 지정 합 니 다.캐 시 에 사용자 정의 문자열 을 만 드 는 방법 도 만 들 려 고 합 니 다.다음 과 같 습 니 다
 
public override stringGetVaryByCustomString(HttpContext context, stringcustom)
{
if(custom == "browser")
{
returncontext.Request.Browser.Browser +
context.Request.Browser.MajorVersion;
}
else
{
return base.GetVaryByCustomString(context, custom);
}
}
이 방법 은 global.asax 파일 에 써 야 합 니 다.ASP.NET 은 이 방법 으로 되 돌아 오 는 문자열 을 사용 하여 캐 시 를 실현 합 니 다.이 방법 이 서로 다른 요청 에서 같은 문자열 을 되 돌려 주면 ASP.NET 은 캐 시 페이지 를 사용 합 니 다.그렇지 않 으 면 새로운 캐 시 버 전 을 생 성 합 니 다.위의 예 에서 GetVaryByCustomString()방법 은 브 라 우 저의 이름 에 따라 캐 시 문자열 을 만 들 고,ASP.NET 은 브 라 우 저의 요청 에 따라 버 전의 캐 시 를 만 듭 니 다.컨트롤 캐 시(Control Cache)위의 캐 시 기술 은 페이지 전 체 를 쉽게 캐 시 할 수 있 습 니 다.지정 한 컨트롤 의 내용 을 캐 시 하려 면 VaryByControl 속성 을 지정 하여 완성 할 수 있 습 니 다
 
%@OutputCacheDuration="20"VaryByControl="MyControl_1"%
위 코드 ASP.NET 은 MyControl 캐 시 됩 니 다.1 컨트롤 20 분.일부 속성 값 에 따라 캐 시 컨트롤 을 하려 면 OutPutCache 명령 을*.ascx 페이지 에 추가 해 야 합 니 다
 
<%@Control Language="C#"AutoEventWireup="true"CodeFile="MyControl.ascx.cs"
Inherits="Controls_MyControl"%>
<%@OutputCacheDuration="20"VaryByControl="EmployeeID"%>
VaryByControl="EmployeeID"는 ASP.NET 에 컨트롤 에 명 시 된 EmployeeID 속성 에 따라 버 전의 캐 시 를 만 들 라 고 알려 줍 니 다..ascx.cs 파일 에 EmplyeeID 속성 을 추가 하여 ASP.NET 캐 시 로 사용 합 니 다.페이지 에 컨트롤 을 추가 하고 EmployeeID 를 설정 합 니 다
 
private int_employeeID;
public intEmployeeID
{
get{ return_employeeID; }
set{ _employeeID = value; }
}
protected voidPage_Load(objectsender, EventArgs e)
{
lblDate.Text = DateTime.Now.ToShortDateString();
lblTime.Text = DateTime.Now.ToLongTimeString();
lblEmployeeID.Text = EmployeeID.ToString();
}
캐 시 프로필(Cache Profile)웹.config 는 캐 시 와 관련 된 설정 을 설정 할 수 있 습 니 다.
 
<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<addname="ProductItemCacheProfile" duration="60"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>
CacheProfile="ProfileName"속성 을 설정 하여 위의 설정 을 사용 할 수 있 습 니 다
 
%@OutputCacheCacheProfile="ProductItemCacheProfile"VaryByParam="None"%
2.데이터 캐 시(Data Caching)ASP.NET 은 또 다른 유연 한 캐 시 형식 인 데이터 캐 시 를 제공 합 니 다.시간 이 걸 리 는 항목 을 대상 캐 시 집합 에 추가 하여 키 로 저장 할 수 있 습 니 다
 
Cache["Name"] = data;
캐 시 만 료,우선 순위,의존 항목 등 을 Cache.Insert()방법 으로 설정 할 수 있 습 니 다
 
date1 = DateTime.Now;Cache.Insert("Date1", date1, null, DateTime.Now.AddSeconds(20), TimeSpan.Zero);
ASP.NET 은 절대 만 료 시간 이나 미끄럼 만 료 시간 을 설정 할 수 있 지만 동시에 사용 할 수 없습니다.캐 시 의존 항목 Cache dependency 캐 시 의존 항목 은 캐 시 를 다른 자원 에 의존 하 게 합 니 다.의존 항목 이 변 경 될 때 캐 시 항목 은 캐 시 에서 자동 으로 삭 제 됩 니 다.캐 시 의존 항목 은 프로그램의 Cache 에 있 는 파일,디 렉 터 리 또는 다른 대상 과 의 키 일 수 있 습 니 다.파일 이나 디 렉 터 리 가 바 뀌 면 캐 시가 만 료 됩 니 다
 
date2 = DateTime.Now;
string[] cacheKeys = { "Date1"};
CacheDependency cacheDepn = newCacheDependency(null, cacheKeys);
Cache.Insert("Date2", date2, cacheDepn);
위의 예"Date 2"캐 시 대상 은"Date 1"캐 시 항목 에 의존 합 니 다."Date 1"대상 이 만 료 되면"Date 2"는 자동 으로 만 료 됩 니 다.CacheDependency(null,cacheKeys)의 첫 번 째 인자 가 비어 있 는 것 은 캐 시 키 의 변경 상황 만 감시 하기 때 문 입 니 다.리 셋 함수 와 캐 시 우선 순위(Callback Method and Cache Priority)ASP.NET 은 캐 시 항목 이 캐 시 에서 지 워 질 때 리 셋 함 수 를 쓸 수 있 도록 합 니 다.캐 시 항목 의 우선 순위 도 설정 할 수 있 습 니 다
 
protected void Page_Load(object sender, EventArgs e)
{
DateTime? date1 = (DateTime?)Cache["Date1"];
if (!date1.HasValue) // date1 == null
{
date1 = DateTime.Now;
Cache.Insert("Date1", date1, null, DateTime.Now.AddSeconds(20), TimeSpan.Zero,
CacheItemPriority.Default, new CacheItemRemovedCallback(CachedItemRemoveCallBack));
}
DateTime? date2 = (DateTime?)Cache["Date2"];
if (!date2.HasValue) // date2 == null
{
date2 = DateTime.Now;
Cache.Insert("Date2", date2, null, DateTime.Now.AddSeconds(40), TimeSpan.Zero,
CacheItemPriority.Default, new CacheItemRemovedCallback(CachedItemRemoveCallBack));
}
// Set values in labels
lblDate.Text = date1.Value.ToShortDateString();
lblTime.Text = date1.Value.ToLongTimeString();
lblDate1.Text = date2.Value.ToShortDateString();
lblTime1.Text = date2.Value.ToLongTimeString();
}
private void CachedItemRemoveCallBack(string key, object value, CacheItemRemovedReason reason)
{
if (key == "Date1" || key == "Date2")
{
Cache.Remove("Date1");
Cache.Remove("Date2");
}
}
예 에서'Date 1'과'Date 2'캐 시 를 만 들 었 습 니 다.'Date 1'은 20 초 만 에 만 료 되 는'Date 2'는 40 초 다.그러나 저 희 는 제 거 된 리 셋 함 수 를 등 록 했 기 때문에'Date 1'이나'Date 2'중 하 나 는 기한 이 지나 면 Cacheditem RemoveCallBack 방법 을 실행 합 니 다.이 방법 에서 두 개의 캐 시 항목 을 제 거 했 습 니 다.ASP.NET 은 캐 시 항목 업 데 이 트 를 처리 할 때 리 셋 함수 Cacheitem UpdateCallback 도 제공 합 니 다.원문:http://kb.cnblogs.com/page/50971/

좋은 웹페이지 즐겨찾기