programing

ASP.NET에서 페이지 캐시 지우기

lovejava 2023. 10. 31. 20:14

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 종속성을 사용하지 않는 이유는 무엇입니까?

sqlcache 종속성 msdn

이렇게 하면 맞춤형 캐시 클리어 코드를 구현하지 않고 DB에서 내용이 변경됨에 따라 캐시를 새로 고칩니다.

HttpRuntime.Close()는 모든 방법을 입니다. 나는 모든 방법을 시도하고 이것만이 나에게 효과가 있습니다.

언급URL : https://stackoverflow.com/questions/11585/clearing-page-cache-in-asp-net