ASP.NET에서 페이지 캐시 지우기
블로그의 경우 출력 캐시를 사용하여 특정 게시물의 캐시된 버전을 약 10분간 저장하려고 하는데 괜찮습니다.
<%@OutputCache Duration="600" VaryByParam="*" %>
하지만 누군가가 댓글을 달면 캐시를 지우고 페이지가 새로 고쳐지고 댓글이 보일 수 있도록 하고 싶습니다.
ASP에서 이걸 어떻게 해요?네트 C#?
제가 찾던 답을 찾았습니다.
HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx");
캐시를 지울 페이지를 알고 있다면 위의 내용도 괜찮습니다.내 경우(ASP).NET MVC) 전 세계에서 동일한 데이터를 참조했습니다.따라서 [저장]을 할 때 캐시 사이트를 전체적으로 지우고 싶었습니다.이것이 제게 효과가 있었던 일입니다: http://aspalliance.com/668
이 작업은 OnAction의 컨텍스트에서 수행됩니다.필터 실행 중입니다.OnAction을 재정의함으로써 이 작업을 쉽게 수행할 수 있습니다.Base Controller 같은 곳에서 실행 중입니다.
HttpContextBase httpContext = filterContext.HttpContext;
httpContext.Response.AddCacheItemDependency("Pages");
설정:
protected void Application_Start()
{
HttpRuntime.Cache.Insert("Pages", DateTime.Now);
}
경미한 조정:"플래시 메시지"(오류 메시지, 성공 메시지 - "이 항목은 성공적으로 저장되었습니다" 등)를 추가하는 도우미가 있습니다.이후 GET마다 플래시 메시지가 뜨지 않도록 하기 위해 플래시 메시지 작성 후 무효 처리를 해야 했습니다.
캐시 지우기:
HttpRuntime.Cache.Insert("Pages", DateTime.Now);
도움이 되길 바랍니다.
응답을 사용합니다.캐시 항목 의존성을 추가하여 모든 출력 캐시를 지웁니다.
public class Page : System.Web.UI.Page
{
protected override void OnLoad(EventArgs e)
{
try
{
string cacheKey = "cacheKey";
object cache = HttpContext.Current.Cache[cacheKey];
if (cache == null)
{
HttpContext.Current.Cache[cacheKey] = DateTime.UtcNow.ToString();
}
Response.AddCacheItemDependency(cacheKey);
}
catch (Exception ex)
{
throw new SystemException(ex.Message);
}
base.OnLoad(e);
}
}
// Clear All OutPutCache Method
public void ClearAllOutPutCache()
{
string cacheKey = "cacheKey";
HttpContext.Cache.Remove(cacheKey);
}
이는 ASP에서도 사용할 수 있습니다.NET MVC의 Output Cashed 페이지입니다.
마스터 페이지 로드 이벤트에 다음 사항을 적어주시기 바랍니다.
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
로그아웃 버튼에서 다음을 클릭합니다.
Session.Abandon();
Session.Clear();
음. OutputCache 항목에서 VariByCustom 속성을 지정할 수 있습니다.이 값은 global.asax에서 구현할 수 있는 GetVariByCustomString 메서드에 매개 변수로 전달됩니다.이 메서드에 의해 반환되는 값은 캐시된 항목에 색인으로 사용됩니다. 예를 들어, 페이지의 주석 수를 반환하면 주석이 추가될 때마다 새 페이지가 캐시됩니다.
여기서 주의해야 할 점은 이렇게 하면 실제로 캐시가 지워지지 않는다는 것입니다.블로그 항목에 댓글 사용이 많아지면 이 방법으로 캐시가 폭발적으로 커질 수 있습니다.
또는 페이지의 변경 불가능한 비트(내비게이션, 광고, 실제 블로그 항목)를 사용자 컨트롤로 구현하고 각 사용자 컨트롤에 부분 페이지 캐싱을 구현할 수도 있습니다.
"*"를 단지 "PostID?"에 따라 캐시가 달라져야 하는 파라미터로만 변경하면 다음과 같은 작업을 수행할 수 있습니다.
//add dependency
string key = "post.aspx?id=" + PostID.ToString();
Cache[key] = new object();
Response.AddCacheItemDependency(key);
누군가가 댓글을 달면...
Cache.Remove(key);
모든 요청은 동일한 캐시 종속성에 연결되기 때문에 VariByParam *의 경우에도 이 기능이 가능할 것으로 생각됩니다.
게시물 테이블에 sqlcache 종속성을 사용하지 않는 이유는 무엇입니까?
이렇게 하면 맞춤형 캐시 클리어 코드를 구현하지 않고 DB에서 내용이 변경됨에 따라 캐시를 새로 고칩니다.
HttpRuntime.Close()
는 모든 방법을 입니다. 나는 모든 방법을 시도하고 이것만이 나에게 효과가 있습니다.
언급URL : https://stackoverflow.com/questions/11585/clearing-page-cache-in-asp-net
'programing' 카테고리의 다른 글
Powershell Console에서 여러 줄 문자열을 할당하는 방법 (0) | 2023.11.05 |
---|---|
C에서 printf() 함수의 반환 값 (0) | 2023.10.31 |
자바스크립트에서 주기적으로 함수를 호출하는 방법이 있습니까? (0) | 2023.10.31 |
테마개발을 위한 워드프레스 오프라인 설명서 (0) | 2023.10.31 |
'fName' 속성은 인덱스 서명에서 가져온 것이므로 ['fName']을(를) 사용하여 액세스해야 합니다. (0) | 2023.10.31 |