मुख्य कारण जिसे मैं आज देख रहा हूं कि रेडिस पर मेमेकैड के लिए एक उपयोग-केस के रूप में वह बेहतर मेमोरी दक्षता है जिसे आपको सादे HTML टुकड़े कैशिंग (या इसी तरह के अनुप्रयोगों) के साथ प्राप्त करने में सक्षम होना चाहिए । यदि आपको अपनी वस्तुओं के अलग-अलग क्षेत्रों को अलग-अलग मेमॉक्ड कुंजियों में संग्रहीत करने की आवश्यकता है, तो Redis hashes अधिक मेमोरी कुशल होने जा रहा है, लेकिन जब आपके पास कुंजी की एक बड़ी संख्या है -> simple_string जोड़े, मेमकेड आपको प्रति आइटम देने में सक्षम होना चाहिए मेगाबाइट।
अन्य चीजें जो मेम्केड के बारे में अच्छे बिंदु हैं:
- यह कोड का एक बहुत ही सरल टुकड़ा है, इसलिए यदि आपको केवल इसके द्वारा प्रदान की जाने वाली कार्यक्षमता की आवश्यकता है, तो यह एक उचित विकल्प है जो मुझे लगता है, लेकिन मैंने इसे उत्पादन में कभी इस्तेमाल नहीं किया।
- यह बहु-थ्रेडेड है, इसलिए यदि आपको एकल-बॉक्स सेटअप में स्केल करने की आवश्यकता है, तो यह एक अच्छी बात है और आपको केवल एक उदाहरण के साथ बात करने की आवश्यकता है।
मेरा मानना है कि कैश के रूप में रेडिस अधिक से अधिक समझ में आता है क्योंकि लोग बुद्धिमान कैशिंग की ओर बढ़ते हैं या जब वे रेडिस डेटा संरचनाओं के माध्यम से कैश्ड डेटा की संरचना को संरक्षित करने का प्रयास करते हैं।
रेडिस एलआरयू और मेमोरेटेड एलआरयू के बीच तुलना।
दोनों ज्ञापन और रेडिस वास्तविक एलआरयू निष्कासन नहीं करते हैं, लेकिन केवल इसका एक अनुमान है।
Memcache निष्कासन प्रति आकार वर्ग है और इसके स्लैब आवंटन के कार्यान्वयन विवरण पर निर्भर करता है। उदाहरण के लिए यदि आप किसी आइटम को जोड़ना चाहते हैं जो किसी दिए गए आकार वर्ग में फिट बैठता है, तो मेमकास्ट उस कक्षा में समाप्त / न-हाल ही में उपयोग की गई वस्तुओं को हटाने का प्रयास करेगा, बजाय इसके कि क्या वस्तु है, इसे समझने के लिए एक वैश्विक प्रयास करने के लिए। आकार, जो सबसे अच्छा उम्मीदवार है।
रेडिस इसके बजाय एक अच्छी वस्तु को निकालने के लिए एक उम्मीदवार के रूप में लेने की कोशिश करता है जब maxmemory
सीमा पूरी हो जाती है, सभी वस्तुओं को देखते हुए, आकार वर्ग की परवाह किए बिना, लेकिन केवल एक अच्छी वस्तु प्रदान करने में सक्षम है, अधिक से अधिक वस्तु के साथ सबसे अच्छी वस्तु नहीं है समय।
जिस तरह से रेडिस ऐसा करता है वह कुछ वस्तुओं का नमूना लेकर, सबसे लंबे समय तक निष्क्रिय (एक्सेस नहीं किया गया) उठाता है। चूंकि Redis 3.0 (वर्तमान में बीटा में) एल्गोरिथ्म में सुधार किया गया था और यह निष्कासन के दौरान एक अच्छा उम्मीदवार पूल भी लेता है, इसलिए सन्निकटन में सुधार किया गया था। में Redis प्रलेखन आप एक वर्णन है और यह कैसे काम करता है के बारे में विवरण के साथ रेखांकन पा सकते हैं ।
सरल स्ट्रिंग -> स्ट्रिंग मैप्स के लिए रेडिस की तुलना में मेमेकैच्ड का बेहतर मेमोरी फुटप्रिंट क्यों है।
रेडिस सॉफ्टवेयर का एक अधिक जटिल टुकड़ा है, इसलिए रेडिस में मूल्यों को एक उच्च स्तरीय प्रोग्रामिंग भाषा में वस्तुओं के समान अधिक संग्रहीत किया जाता है: उनके पास स्मृति प्रबंधन के लिए संबंधित प्रकार, एन्कोडिंग, संदर्भ गिनती है। यह Redis आंतरिक संरचना को अच्छा और प्रबंधनीय बनाता है, लेकिन इसमें ओवरहेड की तुलना में ओवरहेड होता है जो केवल तारों से संबंधित होता है।
जब Redis अधिक स्मृति कुशल होने लगता है
Redis एक विशेष मेमोरी सेविंग तरीके से छोटे कुल डेटा प्रकारों को संग्रहीत करने में सक्षम है। उदाहरण के लिए, एक वस्तु का प्रतिनिधित्व करने वाला एक छोटा रेडिस हैश, आंतरिक रूप से हैश तालिका के साथ नहीं, बल्कि एक द्विआधारी अद्वितीय बूँद के रूप में संग्रहीत किया जाता है। तो एक हैश में ऑब्जेक्ट के प्रति कई फील्ड सेट करना, N अलग-अलग कीज को मेमेकैड में स्टोर करने की तुलना में अधिक कुशल है।
आप वास्तव में किसी वस्तु को मेमरी के रूप में एकल JSON (या बाइनरी-एन्कोडेड) ब्लॉब में स्टोर कर सकते हैं, लेकिन Redis के विपरीत, यह आपको स्वतंत्र फ़ील्ड लाने या अपडेट करने की अनुमति नहीं देगा।
बुद्धिमान कैशिंग के संदर्भ में रेडिस का लाभ।
Redis डेटा संरचनाओं के कारण, कैश के अमान्य होने पर वस्तुओं को नष्ट करने के लिए उपयोग किए जाने वाले सामान्य पैटर्न को बाद में DB से इसे फिर से बनाने के लिए, Redis का उपयोग करने का एक मुख्य तरीका है।
उदाहरण के लिए, कल्पना करें कि साइट के "नवीनतम" अनुभाग को पॉप्युलेट करने के लिए आपको हैकर न्यूज़ में पोस्ट की गई नवीनतम एन समाचार को कैश करना होगा। Redis के साथ आप जो भी करते हैं वह एक सूची (एम आइटम के लिए कैप्ड) है जिसमें नवीनतम समाचार सम्मिलित हैं। यदि आप अपने डेटा के लिए किसी अन्य स्टोर का उपयोग करते हैं, और एक कैश के रूप में रेडिस, जो आप करते हैं वह एक नया आइटम पोस्ट करने पर दोनों विचारों (रेडिस और डीबी) को आबाद करने के लिए है । कैश अमान्य नहीं है।
हालाँकि एप्लिकेशन में हमेशा तर्क हो सकते हैं ताकि यदि रेडिस सूची खाली पाई जाए, उदाहरण के लिए, स्टार्टअप के बाद, प्रारंभिक दृश्य डीबी से फिर से बनाया जा सकता है।
बुद्धिमान कैशिंग का उपयोग करके मेम्केच्ड की तुलना में अधिक कुशल तरीके से रेडिस के साथ कैशिंग प्रदर्शन करना संभव है, लेकिन सभी समस्याएं इस पैटर्न के लिए उपयुक्त नहीं हैं। उदाहरण के लिए HTML टुकड़े कैशिंग इस तकनीक से लाभ नहीं हो सकता है।