سؤال

على بلدي بلوق أنا الراغبين في استخدام إخراج ذاكرة التخزين المؤقت إلى حفظ نسخة مخبأة من perticular بعد حوالي 10 دقائق و هذا جيد...

<%@OutputCache Duration="600" VaryByParam="*" %>

ومع ذلك ، إذا كان شخص ما وظيفة التعليق ، أريد أن مسح ذاكرة التخزين المؤقت بحيث يتم تحديث الصفحة و التعليق يمكن أن ينظر إليه.

كيف أفعل هذا في ASP.Net C# ؟

هل كانت مفيدة؟

المحلول

لقد وجدت الإجابة التي كنت أبحث عنها:

HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx");

نصائح أخرى

أعلاه على ما يرام إذا كنت تعرف ما هي الصفحات التي تريد مسح ذاكرة التخزين المؤقت.في بلدي على سبيل المثال (ASP.NET MVC) لقد رجعت نفس البيانات من جميع أنحاء.لذلك ، عندما فعلت [حفظ] أردت مسح ذاكرة التخزين المؤقت الموقع على نطاق واسع.هذا هو ما عملت بالنسبة لي: http://aspalliance.com/668

ويتم ذلك في سياق OnActionExecuting التصفية.فإنه يمكن بسهولة أن يتم ذلك عن طريق تجاوز OnActionExecuting في BaseController أو شيء من هذا.

HttpContextBase httpContext = filterContext.HttpContext;
httpContext.Response.AddCacheItemDependency("Pages");

الإعداد:

protected void Application_Start()
{
    HttpRuntime.Cache.Insert("Pages", DateTime.Now);
}

تعديل بسيط:علي مساعد الذي يضيف "فلاش الرسائل" (رسائل خطأ النجاح الرسائل - "هذا البند تم حفظها بنجاح" ، الخ).من أجل تجنب فلاش رسالة من الظهور على كل لاحقة على, علي أن يبطل بعد كتابة رسالة فلاش.

مسح ذاكرة التخزين المؤقت:

HttpRuntime.Cache.Insert("Pages", DateTime.Now);

ويساعد هذا الأمل.

باستخدام استجابة.AddCacheItemDependency واضح كل outputcaches.

  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 OutputCachedPage.

على الصفحة الرئيسية تحميل الحدث ، يرجى كتابة التالي:

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();

و في زر الخروج انقر فوق:

Session.Abandon();
Session.Clear();

همم.يمكنك تحديد VaryByCustom السمة على OutputCache البند.قيمة هذا تم تمريره كمعلمة إلى GetVaryByCustomString الطريقة التي يمكنك تنفيذها في العالمية.asax.القيمة التي تم إرجاعها بواسطة هذه الطريقة يتم استخدام مؤشر إلى المخزن مؤقتا البنود - إذا كنت إرجاع عدد التعليقات على الصفحة ، على سبيل المثال ، في كل مرة يتم إضافة تعليق جديد الصفحة سوف يكون مؤقتا.

التحذير من أن هذا هو أن هذا ليس في الواقع مسح ذاكرة التخزين المؤقت.إذا بلوق دخول يحصل الثقيلة تعليق استخدام ذاكرة التخزين المؤقت الخاصة بك يمكن أن تنفجر في الحجم مع هذا الأسلوب.

بدلا من ذلك ، يمكن تنفيذ غير قابلة للتغيير أجزاء من الصفحة (الملاحة, الإعلانات, الفعلية دخول بلوق) مثل عناصر تحكم المستخدم وتنفيذ جزئية تخزين الصفحة في الذاكرة المخبئية على كل من تلك الضوابط المستخدم.

إذا قمت بتغيير "*" فقط المعلمات ذاكرة التخزين المؤقت يجب أن تختلف على (PostID?) يمكنك أن تفعل شيئا مثل هذا:

//add dependency
string key = "post.aspx?id=" + PostID.ToString();
Cache[key] = new object();
Response.AddCacheItemDependency(key);

و عندما يقوم شخص ما يضيف تعليق...

Cache.Remove(key);

أعتقد أن هذا من شأنه أن تعمل حتى مع VaryByParam * ، حيث أن جميع الطلبات سوف تكون مرتبطة إلى نفس ذاكرة التخزين المؤقت التبعية.

لماذا لا تستخدم sqlcachedependency على الوظائف الطاولة ؟

sqlcachedependency msdn

هذه الطريقة لا تنفذ مخصص ذاكرة التخزين المؤقت مسح رمز ببساطة تحديث ذاكرة التخزين المؤقت محتوى التغييرات في db ؟

HttpRuntime.Close() ..حاولت كل طريقة و هذا هو فقط أن العمل بالنسبة لي

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top