2009-12-08 12 views
6

में किसी विशिष्ट समय पर कैश साफ़ करें, इसलिए मेरे पास एक प्रक्रिया है जो मध्यरात्रि में चलती है जो फ्लैश ऑब्जेक्ट के लिए प्रारंभ और समाप्ति बिंदु सेट करती है। इसे केवल दिन में एक बार चलाने की जरूरत है, इसलिए मैं स्पष्ट रूप से परिणाम सेट को कैश कर रहा हूं।ASP.NET 2.0

हालांकि, जिस समस्या में मैं चल रहा हूं वह है, यदि डेटा अभी भी मिडनाइट के बाद कैश किया गया है, तो यह कैश की अवधि समाप्त होने तक सबसे सही डेटा में नहीं खींच रहा है।

मुझे मूल रूप से 11:59:59 बजे समाप्त होने के लिए कैश की आवश्यकता होती है, ताकि 12:00 बजे इसे सही डेटा मिल जाए।

मैं तालिका पर एक एसक्यूएल कैश निर्भरता अनुमान लगा रहा हूं, मैं डेटा को खींच रहा हूं आदर्श से आदर्श होगा, हालांकि मैंने इसे पहले कभी सेट नहीं किया है।

क्या मिडनाइट पर एक विशिष्ट आइटम को हटाने के लिए कैश को बताने का कोई तरीका है?

धन्यवाद दोस्तों!

DateTime expireWeights = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59, 999); 
Cache.Insert("CacheItemName", itemToCache, null, expireWeights, System.Web.Caching.Cache.NoSlidingExpiration); 
+0

+1 दिलचस्प प्रश्न। मुझे जवाब में भी रूचि है। – Saar

+1

पूर्ण निष्पादन एक डेटटाइम है, डेल्टा नहीं। नीचे मेरा जवाब देखें। – RickNZ

+0

एक उत्तर का चयन करने के लिए मत भूलना ... – RickNZ

उत्तर

5

आप कैश ऑब्जेक्ट पर एक पूर्ण निष्पादन समय निर्धारित कर सकते हैं, जो डेटटाइम है।

आप एक SQLEacheDependency के साथ एक पूर्ण निष्पादन को भी जोड़ सकते हैं।

कैश की समयसीमा समाप्त होने पर नए डेटा को नहीं खींचने के मुद्दे के बारे में: आप उस समय कैश को रीफ्रेश करते समय कैश इटिम रिमांड कैलबैक को वायरस को रीफ्रेश कर सकते हैं और उस समय कैश रीफ्रेश कर सकते हैं।

+0

तो ऐसा कुछ है? डेटटाइम की समाप्ति रात = नई डेटटाइम (डेटटाइम.अब.हाँ, डेटटाइम.अब.मोन्थ, डेटटाइम.अब। डे, 23, 5 9, 5 9, 99 9); कैश। निबंध ("कैशइटम नाम", सूची, शून्य, समाप्ति रात, सिस्टम। वेब.कैचिंग.कैच.नहीं स्लाइडिंग निष्पादन); –

+1

निश्चित रूप से, सिवाय इसके कि मैं अब के बजाय UtcNow का उपयोग करूंगा और मैं तीन अलग-अलग बनाने के बजाय इसके एक उदाहरण का उपयोग करूंगा। – RickNZ

1

आप here देखो, के तहत "समय-आधारित निर्भरता" हैं, तो यह पता चलता है समाप्त करने के लिए आइटम स्थापित करने के लिए कैसे:

--Absolute समय सीमा समाप्ति ---

मैं मुझे मिल गया लगता है एक विशिष्ट समय पर। क्या आप यही खोज रहे हैं?

+0

वास्तव में नहीं। समय आधारित निर्भरता पूर्ण नहीं हैं। मैं इसे बिल्कुल मिडनाइट पर साफ़ करने के लिए नहीं कह सकता, मैं केवल "इसे 10 मिनट, या 2 घंटे में साफ़ कर सकता हूं" कह सकता हूं? –

+1

एक बेहतर लिंक होगा: http://msdn.microsoft.com/en-us/library/4y13wyk9.aspx - हालांकि जब भी आप आइटम डालते हैं, तो आज की तारीख, सही समय पर आपको सही डेटटाइम का काम करना होगा 23:59:59, और सुनिश्चित करें कि आप टाइमस्पेन को 'कैश पर सेट करें। NoSlidingExpiration' –

+0

@JackM: ठीक है, लेकिन यदि आप वर्तमान समय जानते हैं, तो आप मध्यरात्रि तक कितनी मिनटों की गणना कर सकते हैं। इसके अलावा, झोफ ने नोस्लाइडिंग एक्स्पिरेशन के बारे में क्या कहा बिल्कुल सही है। –

3

मुझे समझ में नहीं आता कि आपको पूर्ण समाप्ति के साथ समस्या क्यों है? आप उस सटीक डेटाटाइम को इंगित कर सकते हैं जिसमें आइटम कैश से समाप्त हो जाएगा। इसलिए, कोड की निम्न पंक्ति कुंजी "माईकी" के तहत कैश में "myObject" डालेंगी और अगले दिन मध्यरात्रि में समाप्त हो जाएगी (भले ही यह कैश में प्रवेश करे)।

Cache.Insert("MyKey", myObject, null, DateTime.Today.AddDays(1), TimeSpan.Zero); 
+0

मुझे लगता है कि अगर आप दिन जोड़ रहे हैं, तो यह मेरा भ्रम था, अगर यह 1 बजे दर्ज किया गया था, तो यह अगले दिन 1 बजे –

+0

पर समाप्त हो जाएगा, यदि आप डेटटाइम में दिन जोड़ते हैं.अब फिर हाँ यह होगा, लेकिन यदि आप डेटटाइम में दिन जोड़ते हैं आजकल यह समय बंद कर दिया जाएगा। –

+0

या शायद डेटटाइम। आज। AddSeconds (8639 9) 23:59:59 प्राप्त करने के लिए? पता नहीं। ऐसा लगता है कि डेटटाइम से वर्तमान माह दिन और साल खींच रहा है। यूटीसीएनओ थोड़ा क्लीनर हो सकता है। वास्तव में, वही अंत परिणाम, हालांकि। – RickNZ