ASP.NET में क्लियरिंग पेज कैश

मेरे ब्लॉग के लिए मैं आउटपुट कैश का उपयोग लगभग 10 मिनट के लिए एक लंबवत पोस्ट के कैश किए गए संस्करण को सहेजने के लिए करना चाहता हूं, और यह ठीक है ...

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

हालांकि, अगर कोई टिप्पणी पोस्ट करता है, तो मैं कैश साफ़ करना चाहता हूं ताकि पृष्ठ रीफ्रेश हो और टिप्पणी देखी जा सके।

मैं इसे ASP.Net C# में कैसे करूं?

0
ro fr bn

7 उत्तर

मुझे वह जवाब मिला है जिसे मैं ढूंढ रहा था:

HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx");
0
जोड़ा
मुझे नहीं लगता कि एएसपी में कैशिंग उपलब्ध थी, इसलिए कोई खेद नहीं है।
जोड़ा लेखक GateKiller, स्रोत
मैं एमवीसी 5.2.3 का उपयोग कर रहा हूं, मुझे यह कोड कहां लिखना चाहिए?
जोड़ा लेखक Mohammad Dayyan, स्रोत
क्या किसी को पता है कि क्लासिक एएसपी के लिए ऐसा कुछ उपलब्ध है या नहीं?
जोड़ा लेखक Brettski, स्रोत
यह उस पृष्ठ के लिए प्रत्येक पैरा के लिए सभी के लिए सभी कैश साफ़ करता है।
जोड़ा लेखक Salim, स्रोत
मैं गतिशील मेनू के लिए एक वेब उपयोगकर्ता नियंत्रण का उपयोग कर रहा हूं, मैं आउटपुट कैश का उपयोग कर रहा हूं और लॉगआउट पर कैश को हटाना चाहता हूं, मैंने आपके समाधान का उपयोग किया और मेरे उपयोगकर्ता नियंत्रण के पथ को पारित किया लेकिन मेरे लिए काम नहीं किया।
जोड़ा लेखक Neha Thakur, स्रोत

यदि आप "*" को केवल पैरामीटर में बदलते हैं तो कैश पर भिन्न होना चाहिए (पोस्टआईडी?) आप ऐसा कुछ कर सकते हैं:

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

और जब कोई टिप्पणी जोड़ता है ...

Cache.Remove(key);

मुझे लगता है कि यह VaryByParam * के साथ भी काम करेगा, क्योंकि सभी अनुरोध एक ही कैश निर्भरता से बंधे होंगे।

0
जोड़ा

हम्म। आप आउटपुट कैश आइटम पर VaryByCustom विशेषता निर्दिष्ट कर सकते हैं। इसका मान GetVaryByCustomString विधि के पैरामीटर के रूप में पारित किया गया है जिसे आप global.asax में कार्यान्वित कर सकते हैं। इस विधि द्वारा लौटाए गए मान को कैश किए गए आइटमों में एक इंडेक्स के रूप में उपयोग किया जाता है - यदि आप पृष्ठ पर टिप्पणियों की संख्या वापस करते हैं, उदाहरण के लिए, प्रत्येक बार जब कोई टिप्पणी जोड़ा जाता है तो एक नया पृष्ठ कैश किया जाएगा।

इस के लिए चेतावनी यह है कि यह वास्तव में कैश को साफ़ नहीं करता है। यदि किसी ब्लॉग एंट्री को भारी टिप्पणी का उपयोग मिलता है, तो आपका कैश इस विधि के साथ आकार में विस्फोट कर सकता है।

वैकल्पिक रूप से, आप पृष्ठ के गैर-परिवर्तनीय बिट्स (नेविगेशन, विज्ञापन, वास्तविक ब्लॉग प्रविष्टि) को उपयोगकर्ता नियंत्रण के रूप में लागू कर सकते हैं और उन उपयोगकर्ता नियंत्रणों में आंशिक पृष्ठ कैशिंग लागू कर सकते हैं।

0
जोड़ा

पोस्ट टेबल पर sqlcached निर्भरता का उपयोग क्यों नहीं करें?

sqlcached निर्भरता msdn

इस तरह आप कस्टम कैश समाशोधन कोड को कार्यान्वित नहीं कर रहे हैं और डीबी में सामग्री बदलते ही कैश को रीफ्रेश कर रहे हैं?

0
जोड़ा

HttpRuntime.Close() .. I try all method and this is the only that work for me

0
जोड़ा
मुझे संदेह होगा कि यह आईआईएस पर एएसपी.NET आवेदन प्रक्रिया बंद कर रहा है। यह थोड़ा अधिक लगता है, शायद सभी कैश साफ़ करेगा और बड़ी वेबसाइटों पर महत्वपूर्ण प्रदर्शन समस्याएं होगी।
जोड़ा लेखक GateKiller, स्रोत

The above are fine if you know what pages you want to clear the cache for. In my instance (ASP.NET MVC) I referenced the same data from all over. Therefore, when I did a [save] I wanted to clear cache site wide. This is what worked for me: http://aspalliance.com/668

यह एक OnActionExecuting फ़िल्टर के संदर्भ में किया जाता है। यह बेसकंट्रोलर या कुछ में OnActionExecuting को ओवरराइड करके आसानी से किया जा सकता है।

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

सेट अप:

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

मामूली चिमटा: मेरे पास एक सहायक है जो "फ़्लैश संदेश" जोड़ता है (त्रुटि संदेश, सफलता संदेश - "यह आइटम सफलतापूर्वक सहेजा गया है", आदि)। फ्लैश संदेश से बचने के लिए प्रत्येक आगामी जीईटी पर दिखने से बचने के लिए, मुझे फ़्लैश संदेश लिखने के बाद अमान्य करना पड़ा।

समाशोधन कैश:

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

उम्मीद है की यह मदद करेगा।

0
जोड़ा
jsonresult लौटने पर काम करता है
जोड़ा लेखक Sam Jones, स्रोत
@ केविन आप लॉगआउट के बाद वेबसाइट के सभी कैश किए गए पृष्ठों को साफ़ करने के तरीके को समझा सकते हैं
जोड़ा लेखक Mohit Shah, स्रोत
@ and.maz यदि आपको यह पता चला कि बाल क्रियाओं के लिए इसे कैसे किया जाए, तो वहां एक उदार यहां है।
जोड़ा लेखक marapet, स्रोत
और.मैज़ क्या तुमने यह पता लगाया?
जोड़ा लेखक Hubert Jarema, स्रोत
आईआर केवल पूरे पेज कैशिंग के लिए काम करता है। यह बाल कार्यों के लिए काम नहीं करता है। कोई सुझाव?
जोड़ा लेखक Andrei M, स्रोत
इसने मेरे लिए काम नहीं किया। कैश के तत्वों को साफ़ करने में असमर्थता एमवीसी में एक बड़ी कमी की तरह लगती है
जोड़ा लेखक Dave Lawrence, स्रोत
शायद, आप कैश को साफ़ नहीं कर सकते क्योंकि आप आंशिक दृश्य प्रस्तुत करने के लिए @ Html.Action() का उपयोग करते हैं। आपको OutputCacheAttribute.ChildActionCache = new MemoryCache ("NewRandomStringNameToClearTheCache") का उपयोग करना होगा; पूरे "बाल क्रिया कैश" को साफ़ करने के लिए (सभी बच्चों के कार्यों के लिए - ऐसा लगता है कि लाइब्रेरी का उपयोग किए बिना कोई बेहतर तरीका नहीं है )। dotnet.dzone.com/articles/programmatically-clearing-0
जोड़ा लेखक user2173353, स्रोत

मास्टर पेज लोड इवेंट पर, कृपया निम्न लिखें:

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

और लॉगआउट बटन में क्लिक करें:

Session.Abandon();
Session.Clear();
0
जोड़ा