एक नया रेल ऐप बनाते समय, कैशिंग पहले ही सेट हो चुकी है। यह cache
. का उपयोग करके कुछ दृश्य अंशों को लपेटने के रूप में जल्दी से शुरू हो जाता है सहायक या Rails.cache.fetch
. का उपयोग कर रहे हैं बाहरी एपीआई परिणामों को संग्रहीत करने के लिए। कैश्ड डेटा को रेल के कैश स्टोर में से एक में संग्रहीत किया जाता है, जो डेटा को मेमोरी, मेमकैच्ड, रेडिस में रख सकता है, या इसे सीधे डिस्क पर भी लिख सकता है।
लेकिन किस स्थिति के लिए अलग-अलग कैश स्टोर में से कौन सा सबसे अच्छा है? इस सिंहावलोकन में, हम प्रत्येक विकल्प पर एक नज़र डालेंगे।
<ब्लॉकक्वॉट>👋 और यदि आप इस लेख को पसंद करते हैं, तो हमने रूबी (ऑन रेल्स) के प्रदर्शन के बारे में और भी बहुत कुछ लिखा है, हमारी रूबी प्रदर्शन निगरानी चेकलिस्ट देखें।
फाइल स्टोर
:file_store
डिफ़ॉल्ट रूप से उपयोग किया जाता है जब कोई कैश स्टोर विशेष रूप से कॉन्फ़िगर नहीं किया जाता है। जैसा कि नाम से ही स्पष्ट है, यह फाइल सिस्टम में कैशे प्रविष्टियां लिखता है। ये tmp/cache
. में समाप्त होते हैं जब तक आप cache_store
. को स्पष्ट रूप से सेट करके किसी भिन्न स्थान का चयन नहीं करते हैं, तब तक एप्लिकेशन के रूट में निर्देशिका :file_store
. के लिए कॉन्फ़िगरेशन और उस निर्देशिका के लिए पथ पास करना जिसका आप उपयोग करना चाहते हैं।
config.cache_store = :file_store , "/path/to/cache/directory"
कैशे फ़ाइलें डिस्क में सहेजी जाती हैं और वे स्वचालित रूप से शुद्ध नहीं होती हैं। इसका मतलब है कि आपको यह सुनिश्चित करने के लिए खुद को हटाने के लिए सावधानी बरतनी होगी कि वे आपकी डिस्क को नहीं भरेंगे। उदाहरण के लिए, Rails.cache.cleanup
चल रहा है समय-समय पर आपके कैशे को समाप्त हो चुकी प्रविष्टियों से मुक्त रखेगा।
फ़ाइल स्टोर विकास में उपयोगी है क्योंकि प्रत्येक प्रविष्टि कैश निर्देशिका में संग्रहीत होती है, जिससे आप किसी आइटम को उसकी फ़ाइल को हटाकर कैश से ड्रॉप कर सकते हैं। उदाहरण के लिए, यह कैश अमान्यता के परीक्षण के लिए उपयोगी है।
उत्पादन में, फ़ाइल स्टोर तब उपयोगी होता है जब प्रत्येक सर्वर प्रक्रिया एक ही फ़ाइल सिस्टम पर चलती है। हालांकि यह मेमोरी-आधारित कैश स्टोर की तुलना में धीमा है, अगर कैश संभावित रूप से बहुत बड़ा हो सकता है तो फ़ाइल स्टोर बढ़िया हो सकता है।
मेमोरी स्टोर
संस्करण 5.0 के बाद से, रेल स्वचालित रूप से :memory_store
. सेट करता है एक नया एप्लिकेशन बनाते समय विकास कॉन्फ़िगरेशन में। मेमोरी स्टोर का उपयोग करते समय, कैश्ड डेटा को रूबी वेब सर्वर की प्रक्रिया में मेमोरी में रखा जाता है।
चूंकि डेटा को आपके वेब सर्वर की तरह ही मेमोरी में रखा जाता है, मेमोरी स्टोर विकास में उपयोग करने के लिए बहुत अच्छा है क्योंकि जब भी आप अपने विकास वेब सर्वर को पुनरारंभ करते हैं तो यह स्वचालित रूप से साफ़ हो जाता है।
डिफ़ॉल्ट रूप से, इन-मेमोरी स्टोर 32 मेगाबाइट का उपयोग करेगा, लेकिन आप :size
पास करके इसे ओवरराइड कर सकते हैं कैश स्टोर को कॉन्फ़िगर करते समय विकल्प।
config.cache_store = :memory_store, { size: 16.megabytes }
जब कैश भर जाता है, तो नई प्रविष्टियों के लिए जगह बनाने के लिए हाल ही में उपयोग की गई कम से कम प्रविष्टियां स्वचालित रूप से कैश से हटा दी जाती हैं।
उत्पादन में मेमोरी स्टोर का उपयोग करना संभव है (और सबसे तेज़ समाधान जो आप पा सकते हैं), लेकिन कई सर्वर प्रक्रियाओं को चलाने वाले सिस्टम के लिए अनुशंसित नहीं है। चूंकि प्रक्रियाएं एक-दूसरे के कैश तक नहीं पहुंच सकती हैं, इसलिए प्रत्येक प्रक्रिया को कैश की अपनी प्रति बनाए रखने की आवश्यकता होगी।
मेम्कैश स्टोर
:mem_cache_store
एक केंद्रीकृत, इन-मेमोरी कैश में प्रविष्टियों को संग्रहीत करने के लिए दल्ली रत्न और मेम्केड का उपयोग करता है।
रूबी सर्वर प्रक्रिया के बजाय डेटा को एक अलग प्रक्रिया में रखा जाता है। उसके कारण, जब आपका ऐप पुनरारंभ होता है तो कैश नहीं छोड़ा जाता है, लेकिन जब तक मेम्केड सर्वर चलता रहता है तब तक मेमोरी में रहता है। जब यह फिर से शुरू होगा, तो आप एक नए कैश के साथ शुरुआत करेंगे।
Memcache स्टोर यह मान लेगा कि कैश सर्वर डिफ़ॉल्ट रूप से लोकलहोस्ट पर चल रहा है, लेकिन आप दूरस्थ सर्वर का उपयोग करने के लिए एक या एक से अधिक पते पास कर सकते हैं।
config.cache_store = :mem_cache_store, "cache-1.example.com", "cache-2.example.com"
Memcached को डिफ़ॉल्ट रूप से 64 एमबी के अधिकतम कैश आकार का उपयोग करने के लिए कॉन्फ़िगर किया गया है, लेकिन इसे कमांड लाइन विकल्पों का उपयोग करके या memcached.conf
में कॉन्फ़िगर किया जा सकता है। फ़ाइल। मेमोरी स्टोर की तरह, कैशे अपने अधिकतम आकार तक पहुंचने पर हाल ही में उपयोग की गई वस्तुओं को हटाना शुरू कर देगा।
:mem_cache_store
उत्पादन वातावरण के लिए गो-टू कैश स्टोर है। एक केंद्रीय memcached सर्वर का उपयोग करके, दूरस्थ memcached सर्वर का उपयोग करते समय कैश को एकाधिक वेब सर्वर और यहां तक कि एकाधिक होस्ट के बीच साझा किया जा सकता है।
Redis कैश स्टोर
रेल 5.2 ने :redis_cache_store
. की शुरुआत की store, जो आपको Redis में कैशे प्रविष्टियों को स्टोर करने की अनुमति देता है, ठीक उसी तरह जैसे आप Memcache store का उपयोग करते हैं।
Redis को रेल कैश स्टोर के रूप में उपयोग करने के लिए, एक समर्पित Redis कैश का उपयोग करें जिसे LRU के रूप में सेट किया गया है (अंतिम हाल ही में उपयोग किया गया) कैश, अपने मौजूदा रेडिस सर्वर पर स्टोर को इंगित करने के बजाय, यह सुनिश्चित करने के लिए कि स्टोर के अधिकतम आकार तक पहुंचने पर प्रविष्टियां हटा दी जाती हैं।
रेडिस स्टोर रेडिस रत्न (रेडिस ::डिस्ट्रीब्यूटेड सहित) और हायरडिस के साथ काम करता है, साथ ही कई कॉन्फ़िगरेशन विकल्पों के लिए समर्थन प्रदान करता है, जैसे एक या एक से अधिक रिमोट सर्वर सेट करना।
cache_servers = %w[redis://cache-01:6379/0 redis://cache-02:6379/0]
config.cache_store = :redis_cache_store, { url: cache_servers }
Redis समय-समय पर डिस्क पर डेटासेट लिखेगा, इसलिए कैश सर्वर के पुनरारंभ होने पर आपका अधिकांश कैश्ड डेटा बच जाएगा। विकास में, कैश्ड आइटम को Rails.cache.delete
का उपयोग करके कंसोल से हटाया जा सकता है ।
उत्पादन में, Redis प्रतिद्वंद्वियों Memcached एक केंद्रीकृत कैश स्टोर प्रदान करने में। हालांकि रेल ऐप्स में इसका उपयोग अभी तक मेमकेच्ड जितना व्यापक नहीं है, रेडिस स्टोर भविष्य में एक लोकप्रिय रेल कैश स्टोर बनने की संभावना है।
किस कैश स्टोर का उपयोग करें?
आम तौर पर, रेल की फाइल और मेमोरी स्टोर विकास के लिए बहुत अच्छे होते हैं लेकिन छोटे अनुप्रयोगों के लिए उत्पादन में इस्तेमाल किया जा सकता है जब उनके चेतावनियों को जानते और समझते हैं। प्रोडक्शन-ग्रेड मेम्केड और रेडिस स्टोर आमतौर पर बड़े प्रोडक्शन ऐप्स के लिए बेहतर विकल्प होते हैं, खासकर जब कई होस्ट पर कई वेब सर्वर चलाते हैं।
यह रेल में कैश स्टोर के हमारे अवलोकन को समाप्त करता है। प्रत्येक स्टोर के लिए अधिक जानकारी और कॉन्फ़िगरेशन विकल्पों के लिए रेल गाइड में कैश स्टोर अनुभाग देखना सुनिश्चित करें।
आपको यह लेख और AppSignal अकादमी श्रृंखला के पिछले लेख कैसे पसंद आए? रेल लाइन में कैशिंग के बारे में हमारे पास कुछ और लेख हैं, लेकिन कृपया हमें यह बताने में संकोच न करें कि आप हमें आगे क्या लिखना चाहते हैं (कैशिंग से संबंधित या अन्यथा)!