.net에서 지원되는 두 가지 종속성:
CacheDependency td> |
SqlDependency |
||||
파일 또는 디렉터리에 대한 종속성을 나타냅니다 |
SQL 데이터베이스에 대한 종속성을 나타냅니다 |
슬라이딩 만료 시간 |
|
특정 시점, 유형은 DateTime입니다. |
A TimeSpan 유형의 시간 간격 |
많은 양의 데이터를 캐싱해야 하기 때문에 메모리가 제한되어 있을 경우 필요 시 중요하지 않은 데이터를 캐싱할 수 있도록 캐싱된 데이터를 우선적으로 처리해야 합니다. 우선순위는 캐시된 데이터의 중요도를 지정하는 데 사용됩니다. 중요한 데이터는 장기간 메모리에 보관될 수 있습니다.
삭제 알림
캐시된 데이터가 메모리에서 제거될 때 제공 가능 호출하는 알림 메커니즘 CacheItemRemovedCallback 대리자의 정의를 준수해야 하는 사용자 정의 메서드를 다시 사용합니다. .
특별 참고 사항:
1. 콜백 타이밍은 예측할 수 없으며 가정할 수 없습니다. 콜백 메서드의 실행 스레드에 HttpContext의 컨텍스트가 있는 경우 요청 컨텍스트가 없을 때 Cache 개체에 대한 참조를 얻으려면 HttpRuntime의 캐시 속성을 통해 애플리케이션의 캐시를 사용할 수 있습니다.
2. 페이지에서 콜백 메소드로 인스턴스 메소드를 사용할 수 없습니다. 페이지에서 콜백 메소드를 차단하는 경우 콜백 메소드를 가리키는 참조가 가비지 수집 메커니즘을 방해하므로 메모리가 빨리 소모됩니다.
3. 콜백 메소드는 일반적으로 사용자 정의 클래스의 정적 메소드를 사용하거나 페이지 객체의 정적 메소드를 사용하여 구현됩니다.
두 번째, 파일 기반 캐싱 예시
먼저 테스트 페이지에 라벨을 추가하세요.
<asp:Label Text="" runat="server" id="label1"/>
<span style="font-size:14px;">namespace 基于文件的缓存依赖
{
public class CacheManager
{
public static string Message {
get {
HttpContext context = HttpContext.Current;
//首先从缓存中获取
string message = context.Cache["Message"] as string;
//如果缓存中没有数据
if (message==null)
{
string path = context.Server.MapPath("TestFileCache.txt");
message = System.IO.File.ReadAllText(path);
//将信息保存到缓存中,设置响应的过期时间为1分钟
context.Cache.Add(
"Message",
message,
new System.Web.Caching.CacheDependency(path),//依赖于文件或者目录的依赖
System.Web.Caching.Cache.NoAbsoluteExpiration,//不使用绝对过期时间
new TimeSpan(0, 0, 5),//缓存的时间
System.Web.Caching.CacheItemPriority.Normal, //缓存的优先级
Callback); //过期时的回调
}
return message;
}
}
/// <summary>
/// Callbacks the specified key.
/// </summary>
/// <param name="key">The key.</param>
/// <param name="value">The value.</param>
/// <param name="reason">The reason.</param>
/// <remarks>Editor:v-liuhch CreateTime:2015/5/26 20:13:22</remarks>
private static void Callback(
string key,
Object value,
System.Web.Caching.CacheItemRemovedReason reason
//原因
) {
if (reason == System.Web.Caching.CacheItemRemovedReason.Expired)
{
HttpRuntime.Cache.Insert("Message","时间已到,缓存已过期");
}
}
}
}</span>
Add 호출 시 추가할 캐시 항목이 존재하면 호출이 실패하지만 삽입을 사용하면 새로 삽입된 값이 원래 값을 덮어씁니다.
protected void Page_Load(object sender, EventArgs e) { this.label1.Text = CacheManager.Message; //获取缓存 }