अपने स्वयं के प्रश्न का उत्तर देने के लिए वापस आना, यहां मुख्य समस्या यह है कि एक ही समय में हमेशा समाप्त होने वाली हर चीज से कैसे बचा जाए। यदि ऐसा होने की अनुमति दी जाती है, तो सिस्टम कैश को फिर से पॉप्युलेट करता है और धीमा हो जाएगा।
अधिकांश समय, यह वास्तव में व्यवहार में कोई समस्या नहीं है। समय के साथ, सभी घटक उस समय के संदर्भ में बहाव करने लगते हैं जब वे समाप्त हो रहे होते हैं। यदि एक ही समय में सभी घटक फिर से बनाए जा रहे हैं, तो यह एक कोड गंध है, क्योंकि उन्हें संभवतः एक ही घटक के रूप में एक साथ कैश किया जाना चाहिए (जैसे यदि आपके पास पृष्ठ का अद्वितीय हेडर, बॉडी और पाद लेख अलग-अलग कैश्ड है, तो शायद आप कर सकते हैं पृष्ठ को केवल कैश करें)।
निश्चित रूप से ऐसे समय होते हैं जब कई चीजों को एक समय में कैश करने की आवश्यकता होती है, जैसे कि एक सिस्टम शुरू करने के बाद, अगर हमने पूरा कैश क्लियर कर दिया है या कैश कीज घुमा दी हैं। इस मामले में, यह आमतौर पर इतना बुरा नहीं है क्योंकि घटक तेजी से भरते हैं, और समाप्ति बाद में अलग हो जाएंगे।
इस समस्या के लिए कुछ हद तक समाधान है:
- बस एक निश्चित अवधि के बजाय एक सीमा के भीतर एक यादृच्छिक कैश समाप्ति अवधि चुनें, उदाहरण के लिए 60 मिनट के बजाय 15 और 90 मिनट के बीच एक यादृच्छिक पूर्णांक।
- बासी प्रतिक्रियाओं की अनुमति दें। सिर्फ इसलिए कि कोई कैश आइटम समाप्त हो गया है, इसका मतलब यह नहीं है कि आप इसका उपयोग नहीं कर सकते यदि यह अभी भी वहां है। व्यवसाय की जरूरतों के आधार पर, इसका उपयोग करने के लिए स्वीकार्य हो सकता है यदि समाप्ति के बाद मूल संस्करण लाने के लिए कोई प्रदर्शन समस्या है। HTTP में, यह "must-revalidate" का उद्देश्य है (यदि सच है, तो इसका मतलब है कि समाप्ति के बाद कैश्ड संस्करण का उपयोग नहीं करना है)।