Caching क्या है? ऐप बनाने वालों के लिए सरल गाइड
Caching का मतलब है किसी ऐसी चीज़ की तैयार कॉपी रखना जिसे पाने में समय या खर्च ज़्यादा लगता था, ताकि उसके अगले अनुरोध का जवाब उसी कॉपी से तेज़ी से दिया जा सके। सहेजी गई इस कॉपी को cache कहते हैं। आपका ब्राउज़र इमेज कैश करता है, इसलिए दूसरी बार विज़िट करने पर साइट तेज़ खुलती है; सर्वर धीमी डेटाबेस क्वेरी का नतीजा कैश करता है, ताकि हर विज़िटर के लिए उसे दोबारा न चलाना पड़े।
Caching ऐप्स को तेज़ और चलाने में सस्ता बनाती है। इसका एक बड़ा समझौता यह है कि कॉपी पुरानी हो सकती है।
AI से ऐप बनाते समय caching क्यों मायने रखती है
AI से बने ऐप्स में caching से आपका सामना तीन तरह से होगा:
- “मैंने ऐप अपडेट किया, फिर भी पुराना वर्ज़न दिख रहा है।” यह caching का सबसे आम मौका है, और आमतौर पर इससे कोई नुकसान नहीं होता: आपका ब्राउज़र या CDN सहेजी हुई कॉपी दिखा रहा है।
- स्पीड। अगर कोई पेज इसलिए धीमा है क्योंकि वह हर विज़िटर के लिए एक ही हिसाब दोबारा करता है, तो नतीजे को कैश करने से वह तुरंत लगने लगता है।
- लागत। कई AI बिल्डर और होस्ट कंप्यूट, डेटाबेस समय और बाहरी API कॉल का शुल्क लेते हैं। अगर एक हज़ार विज़िटर एक ही महँगा अनुरोध करें, तो caching से उसका भुगतान सिर्फ़ एक बार होता है।
बुनियादी बातें जानने से आप वहाँ caching माँग सकते हैं जहाँ वह मदद करे, और जब वही किसी चीज़ के गलत दिखने की वजह हो, तो उसे पहचान सकते हैं।
रोज़मर्रा की एक मिसाल
किसी व्यस्त कैफ़े की रसोई को सोचिए।
हर सुबह शेफ़ हर कॉफ़ी ऑर्डर आने पर ताज़ा पिसे बीन्स से बना सकता है। यह धीमा है। इसके बजाय वह गर्म प्लेट पर फ़िल्टर कॉफ़ी का एक बर्तन तैयार रखता है। ज़्यादातर ग्राहकों को सेकंडों में कप मिल जाता है, यह cache hit है। बर्तन खत्म होने पर कोई नई कॉफ़ी बनाता है, यह cache miss है।
लेकिन ज़्यादा देर रखी कॉफ़ी बासी हो जाती है, इसलिए कैफ़े का नियम है कि 30 मिनट से पुराना बर्तन फेंक दो। यही नियम कैश का expiry time है। कोई पूरे दिन एक ही बर्तन नहीं रखता, और किसी का खास ऑर्डर, जैसे ओट मिल्क और तीन चीनी वाली कॉफ़ी, पहले से नहीं बनाया जाता; कुछ चीज़ें कैश की ही नहीं जानी चाहिए।
कैश कहाँ रहते हैं
एक पेज लोड होने पर उसका अनुरोध कई कैश से गुज़र सकता है, यूज़र के सबसे करीब से सबसे दूर तक:
| कैश | कहाँ है | आमतौर पर क्या सहेजता है | उदाहरण |
|---|---|---|---|
| ब्राउज़र कैश | विज़िटर के डिवाइस पर | इमेज, स्टाइलशीट, स्क्रिप्ट, फ़ॉन्ट | दूसरे पेज पर आपका लोगो तुरंत लोड होता है |
| CDN कैश | दुनिया भर में, विज़िटर्स के पास के सर्वर | स्टैटिक फ़ाइलें और कभी-कभी पूरे पेज | टोक्यो का विज़िटर आपके मूल सर्वर के बजाय पास के सर्वर से फ़ाइलें लेता है |
| एप्लिकेशन कैश | आपके सर्वर पर या उसके पास, अक्सर मेमोरी या Redis में | धीमी क्वेरी या बाहरी API कॉल के नतीजे | आज की विनिमय दरें, जो घंटे में एक बार लाई जाती हैं |
| डेटाबेस कैश | डेटाबेस के भीतर | हाल में इस्तेमाल हुआ डेटा और क्वेरी प्लान | लोकप्रिय पंक्तियाँ तेज़ मेमोरी में रहती हैं |
CDN (कंटेंट डिलीवरी नेटवर्क) मूल रूप से आपकी साइट की फ़ाइलों के लिए कैश का एक विश्वव्यापी नेटवर्क है।
कैश कैसे तय करता है कि क्या रखना है
हर कैश को इन्हीं सवालों के जवाब देने होते हैं:
- क्या कैश हो सकता है? सार्वजनिक, साझा डेटा (कोई प्रोडक्ट इमेज, कोई ब्लॉग पोस्ट) — हाँ। निजी डेटा (किसी यूज़र का अकाउंट पेज, उसके संदेश) — साझा कैश में कभी नहीं।
- कितने समय के लिए? इसे TTL (टाइम टू लिव) कहते हैं। लोगो को एक साल तक कैश किया जा सकता है; स्टॉक लेवल को 30 सेकंड तक।
- इसे कैसे अपडेट किया जाता है? या तो कॉपी की मियाद खत्म होती है और उसे फिर से लाया जाता है, या डेटा बदलने पर ऐप उसे जानबूझकर हटा देता है — जिसे invalidation कहते हैं।
वेबसाइट्स के लिए सर्वर Cache-Control हेडर के ज़रिए ब्राउज़र और CDN को बताता है कि हर फ़ाइल कैसे कैश करनी है। उदाहरण के लिए, Cache-Control: max-age=3600 का मतलब है “इस कॉपी को एक घंटे तक दोबारा इस्तेमाल किया जा सकता है।”
आधुनिक बिल्ड टूल स्टैटिक फ़ाइलों के लिए सबसे मुश्किल हिस्सा cache busting से संभालते हैं: जब भी कोई फ़ाइल बदलती है, उसे एक फ़िंगरप्रिंट वाला नया नाम मिलता है, जैसे app.3f9a2c.js। ब्राउज़र पुराने नाम को लंबे समय तक कैश कर सकते हैं, क्योंकि नए वर्ज़न का नाम ही अलग है।
एक उदाहरण: एक प्रोडक्ट कैटलॉग
आपकी एक छोटी ऑनलाइन दुकान है। होम पेज डेटाबेस से 50 प्रोडक्ट, उनकी कीमतें और स्टॉक लेवल दिखाता है, साथ ही एक “ट्रेंडिंग” सूची, जिसके लिए सभी ऑर्डर पर धीमा हिसाब लगाना पड़ता है।
- इमेज और स्क्रिप्ट ब्राउज़र और CDN द्वारा लंबे समय तक कैश होती हैं। हर नए बिल्ड में बदली हुई फ़ाइलों को नए नाम मिलते हैं, इसलिए अपडेट फिर भी दिखते हैं।
- ट्रेंडिंग सूची हर 10 मिनट में एक बार निकाली जाती है और एक एप्लिकेशन कैश में रखी जाती है। उन 10 मिनट में हर विज़िटर को सहेजा हुआ नतीजा तुरंत मिलता है।
- कीमतें थोड़े समय के लिए कैश होती हैं, और जब भी आप कोई प्रोडक्ट बदलते हैं तो कैश साफ़ हो जाता है, ताकि ग्राहकों को पुरानी कीमत ज़्यादा देर न दिखे।
- चेकआउट पर स्टॉक कभी कैश नहीं होता। जब कोई “Buy” दबाता है, तो ऐप असली डेटाबेस जाँचता है, ताकि वह ऐसी चीज़ न बेचे जो अभी-अभी बिक चुकी हो।
- कार्ट और अकाउंट पेज साझा कैश में कभी नहीं रखे जाते, क्योंकि वे निजी हैं।
नतीजा: होम पेज तेज़ है, डेटाबेस का काम बहुत कम है, और पैसे या निजता से जुड़ी कोई चीज़ कभी पुरानी नहीं होती।
मुख्य शब्द
| शब्द | मतलब |
|---|---|
| Cache hit / miss | डेटा कैश में मिला / उसे स्रोत से लाना पड़ा। |
| TTL (टाइम टू लिव) | सहेजी गई कॉपी को कितनी देर तक ताज़ा माना जाता है। |
| पुराना डेटा (Stale data) | सहेजी गई कॉपी जो पुरानी हो चुकी है। |
| Invalidation | मूल चीज़ बदलने पर जानबूझकर कैश की कॉपी हटाना। |
| Cache busting | फ़ाइल बदलने पर उसका नाम या URL बदलना, ताकि कैश नया वर्ज़न लाए। |
| Cache-Control | HTTP हेडर जो ब्राउज़र और CDN को बताता है कि किसी जवाब को कैश कैसे करना है। |
| हार्ड रिफ़्रेश | पेज को इस तरह रीलोड करना कि ब्राउज़र अपना कैश नज़रअंदाज़ करे। |
| Redis | एक लोकप्रिय इन-मेमोरी डेटा स्टोर, जो अक्सर एप्लिकेशन कैश के रूप में इस्तेमाल होता है। |
आम गलतफ़हमियाँ
- “Caching हमेशा अच्छी होती है।” गलत चीज़ कैश करने से असली बग आते हैं: पुरानी कीमतें, नई पोस्ट का न दिखना, या सबसे बुरा मामला, एक यूज़र का निजी पेज दूसरे को दिखना। जानबूझकर कैश करें।
- “अगर मुझे पुराना वर्ज़न दिख रहा है, तो मेरा अपडेट विफल हो गया।” आमतौर पर ऐसा नहीं होता। कुछ टूटा हुआ मानने से पहले हार्ड रिफ़्रेश (Ctrl+Shift+R, या Mac पर Cmd+Shift+R) या प्राइवेट विंडो आज़माएँ।
- “Caching से धीमा ऐप ठीक हो जाता है।” यह बार-बार होने वाले अनुरोधों की धीमी गति को छुपाता है। पहला अनुरोध फिर भी धीमा होता है, और अगर असली समस्या डेटाबेस इंडेक्स की कमी है, तो उसे भी ठीक करें।
- “मुझे हर चीज़ जितना हो सके उतना लंबा कैश करना चाहिए।” लंबे कैश समय उन फ़ाइलों के लिए ठीक हैं जिनके बदलने पर नए नाम मिलते हैं। HTML पेजों और डेटा के लिए कम समय ज़्यादा सुरक्षित है।
- “कैश साफ़ करने से सबके लिए ठीक हो जाता है।” यह सिर्फ़ आपका ब्राउज़र साफ़ करता है। विज़िटर्स और CDN कैश की अपनी कॉपियाँ अब भी रहती हैं।
अपने AI बिल्डर से क्या पूछें
- “इस ऐप के कौन से हिस्से धीमे हैं, और किन्हें सुरक्षित रूप से कैश किया जा सकता है?”
- “[ट्रेंडिंग सूची / API नतीजे] को [N] मिनट के लिए कैश करो, और अंतर्निहित डेटा बदलने पर उसे साफ़ करो।”
- “पक्का करो कि निजी या अकाउंट डेटा वाला कोई पेज CDN या साझा कैश द्वारा कैश न हो सके।”
- “फ़िंगरप्रिंट वाली स्टैटिक फ़ाइलों के लिए लंबे कैश समय रखो और HTML के लिए छोटे।”
- “[बाहरी API] के नतीजे कैश करो ताकि हर पेज लोड पर उसे कॉल न हो, और बताओ कि वह डेटा कितना पुराना हो सकता है।”
- “प्रकाशित करने के बाद मुझे पुराना वर्ज़न दिख रहा है। यह मेरे ब्राउज़र का कैश है, या कुछ डिप्लॉय नहीं हुआ?”
Mythex में caching
Mythex ऐप का अपडेट प्रकाशित करने के बाद, दस्तावेज़ों के अनुसार CDN कैश थोड़ी देर पीछे रह सकते हैं, और सार्वजनिक URL का हार्ड रिफ़्रेश नया वर्ज़न दिखाता है। देखें How to publish। Hosting limits पेज भी स्टैटिक एसेट्स कैश करने की सलाह देता है, क्योंकि होस्टिंग, डेटाबेस समय और बैंडविड्थ का भुगतान आपके क्रेडिट बैलेंस से होता है। उसके आगे, यानी क्वेरी नतीजे या API जवाब कैश करना, वह चीज़ है जिसे आप एजेंट से अपने ऐप में बनवाते हैं।
संबंधित पढ़ाई: CDN क्या है, अपनी वेबसाइट को तेज़ कैसे बनाएँ और rate limiting क्या है।
सवाल
सीधे शब्दों में caching क्या है?
Caching का मतलब है किसी ऐसी चीज़ की कॉपी सहेजना जिसे पाने में समय या खर्च ज़्यादा लगता था, ताकि अगली बार उसकी ज़रूरत पड़ने पर सहेजी हुई कॉपी से तेज़ी से दे दी जाए। ब्राउज़र, CDN, सर्वर और डेटाबेस ऐप्स को तेज़ और चलाने में सस्ता बनाने के लिए कैश इस्तेमाल करते हैं।
अपनी वेबसाइट अपडेट करने के बाद भी पुराना वर्ज़न क्यों दिखता है?
शायद आपका ब्राउज़र या कोई CDN पुरानी फ़ाइलों की सहेजी हुई कॉपी दे रहा है। हार्ड रिफ़्रेश (Windows पर Ctrl+Shift+R, Mac पर Cmd+Shift+R) आमतौर पर इसे ठीक कर देता है। विज़िटर्स के लिए अच्छी तरह बनी साइटें अपडेट की गई फ़ाइलों को नए नाम देती हैं, ताकि कैश अपने आप नया वर्ज़न लाए।
कैश साफ़ करने से क्या होता है?
ब्राउज़र कैश साफ़ करने से ब्राउज़र द्वारा सहेजी गई फ़ाइलों और पेजों की कॉपी मिट जाती है, इसलिए अगली बार वह सब कुछ ताज़ा डाउनलोड करता है। इससे टूटे या पुराने दिखने वाले पेज ठीक हो सकते हैं, और उसके बाद पहली बार पेज थोड़ा धीमा लोड होंगे।
क्या caching से समस्याएँ हो सकती हैं?
हाँ। मुख्य खतरा है पुराना डेटा दिखाना, जैसे पुरानी कीमत या पुराना स्टॉक, या उससे भी बुरा, किसी एक यूज़र का निजी पेज कैश करके किसी और को दिखा देना। अच्छे caching नियम तय करते हैं कि क्या कैश होगा, कितने समय के लिए होगा, और साझा कैश में निजी डेटा कभी नहीं रखा जाएगा।