[천장] ASP.NET 캐시 요약
캐시는 공간으로 시간을 바꾸는 기술이다. 통속적으로 말하면 당신이 얻은 데이터를 메모리에 한동안 저장하는 것이다. 이 짧은 시간 동안 서버는 데이터베이스나 실제 데이터 원본을 읽지 않고 당신이 메모리에 저장한 데이터를 읽는다. 여기에 어떻게 저장 데이터를 설정하고 어떤 데이터를 저장할 수 있는지 의심스럽다.저장 시간의 설정, 실제 데이터 원본 데이터가 서버를 바꾸면 읽기에 편차가 있지 않습니까?서두르지 마라, 다음은 천천히 이야기할 것이다.
캐시의 장점은 캐시가 사이트 성능 최적화에 없어서는 안 될 데이터 처리 메커니즘이다. 그는 데이터베이스 스트레스를 효과적으로 완화시킬 수 있다. 예를 들어 사이트의 분당 조회수가 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전재나 공유를 환영하지만, 반드시 글의 출처를 성명해 주십시오.만약 글이 당신에게 도움이 된다면, 당신이 추천하거나 관심을 가져 주시기를 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[TIL] #8. 프로그래머스 String, Date전달받은 문자열의 길이를 반환한다. 만약 전달받은 문자열 중 하나라도 NULL이 존재하면, NULL을 반환한다. 인수로 전달받은 문자열이 특정 문자열에서 처음 나타나는 위치를 찾아서, 해당 위치를 반환한다. 만약 전...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.