यदि रेडिस पहले से ही स्टैक का एक हिस्सा है, तो रेडिस के साथ मेम्केड का उपयोग क्यों किया जाता है?


85

Redis वह सब कुछ कर सकता है जो Memcached प्रदान करता है (LRU कैश, आइटम समाप्ति, और अब संस्करण 3.x +, वर्तमान में बीटा में क्लस्टरिंग) या twemproxy जैसे टूल द्वारा। प्रदर्शन भी ऐसा ही है। अधिक, Redis निरंतरता जोड़ता है जिसके कारण आपको सर्वर पुनरारंभ के मामले में कैश वार्मिंग करने की आवश्यकता नहीं है।

कुछ पुराने उत्तरों के संदर्भ में जो रेडिस और मेम्चे से तुलना करते हैं, जिनमें से कुछ रेडिस को मेमाचे के प्रतिस्थापन के रूप में पसंद करते हैं (यदि पहले से ही स्टैक में मौजूद हैं):

इसके बावजूद, बड़ी वेब स्केल कंपनियों जैसे कि Instagram, Pinterest, Twitter इत्यादि के ढेरों का अध्ययन करने पर, मैंने पाया कि वे विभिन्न उद्देश्यों के लिए Memcached और Redis दोनों का उपयोग करते हैं, न कि प्राथमिक कैशिंग के लिए Redis का उपयोग करते हुए। प्राथमिक कैश अभी भी Memcached है, और Redis का उपयोग उसके डेटा संरचनाओं के लिए तार्किक कैशिंग आधारित है।

2014 के अनुसार, आपके स्टैक में अतिरिक्त घटक के रूप में जोड़े जाने वाले दर्द को अभी भी क्यों याद किया जाता है, जब आपके पास पहले से ही एक रेडिस घटक है जो सब कुछ कर सकता है जो मेमेकैस्टेड कर सकता है? वे कौन से अनुकूल बिंदु हैं जो आर्किटेक्ट्स / इंजीनियरों को अभी भी पहले से मौजूद रेडिस के अलावा मेमेकैच्ड को शामिल करते हैं?

अपडेट करें :

हमारे प्लेटफार्मों के लिए, हमने पूरी तरह से मेमकाटेड को छोड़ दिया है, और सादे और साथ ही तार्किक कैशिंग आवश्यकताओं के लिए रेडिस का उपयोग करें। अत्यधिक प्रदर्शन करने वाला, लचीला और विश्वसनीय।

कुछ उदाहरण परिदृश्य:

  • एक विशिष्ट पैटर्न द्वारा सभी कैश्ड कुंजियों को सूचीबद्ध करना, और उनके मूल्यों को पढ़ना या हटाना। रेडिस में बहुत आसान है, मेमेकैड में उल्लेखनीय (आसानी से) नहीं।
  • 1 ग्राम से अधिक पेलोड को संग्रहित करना, रेडिस में करना आसान है, मेमकेच्ड में स्लैब के आकार की चोटियों की आवश्यकता होती है, जिसके स्वयं के प्रदर्शन दुष्प्रभाव होते हैं।
  • वर्तमान कैश सामग्री का आसान स्नैपशॉट
  • रेडिस क्लस्टर उत्पादन के साथ-साथ भाषा चालकों के लिए भी तैयार है, इसलिए क्लस्टर तैनाती भी आसान है।

जवाबों:


122

मुख्य कारण जिसे मैं आज देख रहा हूं कि रेडिस पर मेमेकैड के लिए एक उपयोग-केस के रूप में वह बेहतर मेमोरी दक्षता है जिसे आपको सादे HTML टुकड़े कैशिंग (या इसी तरह के अनुप्रयोगों) के साथ प्राप्त करने में सक्षम होना चाहिए । यदि आपको अपनी वस्तुओं के अलग-अलग क्षेत्रों को अलग-अलग मेमॉक्ड कुंजियों में संग्रहीत करने की आवश्यकता है, तो Redis hashes अधिक मेमोरी कुशल होने जा रहा है, लेकिन जब आपके पास कुंजी की एक बड़ी संख्या है -> simple_string जोड़े, मेमकेड आपको प्रति आइटम देने में सक्षम होना चाहिए मेगाबाइट।

अन्य चीजें जो मेम्केड के बारे में अच्छे बिंदु हैं:

  • यह कोड का एक बहुत ही सरल टुकड़ा है, इसलिए यदि आपको केवल इसके द्वारा प्रदान की जाने वाली कार्यक्षमता की आवश्यकता है, तो यह एक उचित विकल्प है जो मुझे लगता है, लेकिन मैंने इसे उत्पादन में कभी इस्तेमाल नहीं किया।
  • यह बहु-थ्रेडेड है, इसलिए यदि आपको एकल-बॉक्स सेटअप में स्केल करने की आवश्यकता है, तो यह एक अच्छी बात है और आपको केवल एक उदाहरण के साथ बात करने की आवश्यकता है।

मेरा मानना ​​है कि कैश के रूप में रेडिस अधिक से अधिक समझ में आता है क्योंकि लोग बुद्धिमान कैशिंग की ओर बढ़ते हैं या जब वे रेडिस डेटा संरचनाओं के माध्यम से कैश्ड डेटा की संरचना को संरक्षित करने का प्रयास करते हैं।

रेडिस एलआरयू और मेमोरेटेड एलआरयू के बीच तुलना।

दोनों ज्ञापन और रेडिस वास्तविक एलआरयू निष्कासन नहीं करते हैं, लेकिन केवल इसका एक अनुमान है।

Memcache निष्कासन प्रति आकार वर्ग है और इसके स्लैब आवंटन के कार्यान्वयन विवरण पर निर्भर करता है। उदाहरण के लिए यदि आप किसी आइटम को जोड़ना चाहते हैं जो किसी दिए गए आकार वर्ग में फिट बैठता है, तो मेमकास्ट उस कक्षा में समाप्त / न-हाल ही में उपयोग की गई वस्तुओं को हटाने का प्रयास करेगा, बजाय इसके कि क्या वस्तु है, इसे समझने के लिए एक वैश्विक प्रयास करने के लिए। आकार, जो सबसे अच्छा उम्मीदवार है।

रेडिस इसके बजाय एक अच्छी वस्तु को निकालने के लिए एक उम्मीदवार के रूप में लेने की कोशिश करता है जब maxmemoryसीमा पूरी हो जाती है, सभी वस्तुओं को देखते हुए, आकार वर्ग की परवाह किए बिना, लेकिन केवल एक अच्छी वस्तु प्रदान करने में सक्षम है, अधिक से अधिक वस्तु के साथ सबसे अच्छी वस्तु नहीं है समय।

जिस तरह से रेडिस ऐसा करता है वह कुछ वस्तुओं का नमूना लेकर, सबसे लंबे समय तक निष्क्रिय (एक्सेस नहीं किया गया) उठाता है। चूंकि Redis 3.0 (वर्तमान में बीटा में) एल्गोरिथ्म में सुधार किया गया था और यह निष्कासन के दौरान एक अच्छा उम्मीदवार पूल भी लेता है, इसलिए सन्निकटन में सुधार किया गया था। में Redis प्रलेखन आप एक वर्णन है और यह कैसे काम करता है के बारे में विवरण के साथ रेखांकन पा सकते हैं

सरल स्ट्रिंग -> स्ट्रिंग मैप्स के लिए रेडिस की तुलना में मेमेकैच्ड का बेहतर मेमोरी फुटप्रिंट क्यों है।

रेडिस सॉफ्टवेयर का एक अधिक जटिल टुकड़ा है, इसलिए रेडिस में मूल्यों को एक उच्च स्तरीय प्रोग्रामिंग भाषा में वस्तुओं के समान अधिक संग्रहीत किया जाता है: उनके पास स्मृति प्रबंधन के लिए संबंधित प्रकार, एन्कोडिंग, संदर्भ गिनती है। यह Redis आंतरिक संरचना को अच्छा और प्रबंधनीय बनाता है, लेकिन इसमें ओवरहेड की तुलना में ओवरहेड होता है जो केवल तारों से संबंधित होता है।

जब Redis अधिक स्मृति कुशल होने लगता है

Redis एक विशेष मेमोरी सेविंग तरीके से छोटे कुल डेटा प्रकारों को संग्रहीत करने में सक्षम है। उदाहरण के लिए, एक वस्तु का प्रतिनिधित्व करने वाला एक छोटा रेडिस हैश, आंतरिक रूप से हैश तालिका के साथ नहीं, बल्कि एक द्विआधारी अद्वितीय बूँद के रूप में संग्रहीत किया जाता है। तो एक हैश में ऑब्जेक्ट के प्रति कई फील्ड सेट करना, N अलग-अलग कीज को मेमेकैड में स्टोर करने की तुलना में अधिक कुशल है।

आप वास्तव में किसी वस्तु को मेमरी के रूप में एकल JSON (या बाइनरी-एन्कोडेड) ब्लॉब में स्टोर कर सकते हैं, लेकिन Redis के विपरीत, यह आपको स्वतंत्र फ़ील्ड लाने या अपडेट करने की अनुमति नहीं देगा।

बुद्धिमान कैशिंग के संदर्भ में रेडिस का लाभ।

Redis डेटा संरचनाओं के कारण, कैश के अमान्य होने पर वस्तुओं को नष्ट करने के लिए उपयोग किए जाने वाले सामान्य पैटर्न को बाद में DB से इसे फिर से बनाने के लिए, Redis का उपयोग करने का एक मुख्य तरीका है।

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

हालाँकि एप्लिकेशन में हमेशा तर्क हो सकते हैं ताकि यदि रेडिस सूची खाली पाई जाए, उदाहरण के लिए, स्टार्टअप के बाद, प्रारंभिक दृश्य डीबी से फिर से बनाया जा सकता है।

बुद्धिमान कैशिंग का उपयोग करके मेम्केच्ड की तुलना में अधिक कुशल तरीके से रेडिस के साथ कैशिंग प्रदर्शन करना संभव है, लेकिन सभी समस्याएं इस पैटर्न के लिए उपयुक्त नहीं हैं। उदाहरण के लिए HTML टुकड़े कैशिंग इस तकनीक से लाभ नहीं हो सकता है।


धन्यवाद Antirez निर्माता। लेकिन ** मेम्केड की तुलना में सादे तार के लिए रेडिस मेमोरी फ़ुटप्रिंट क्यों है? ** संपीड़न एक कारक है? या रेडिस कुछ अन्य अतिरिक्त डेटा संग्रहीत करता है जब एक एसईटी का उपयोग सादे स्ट्रिंग को स्टोर करने के लिए किया जाता है? यह बहुत अच्छा होगा यदि आप इस जानकारी को उत्तर में शामिल कर सकते हैं।
ध्रुवपतक

3
मैंने उत्तर को बेहतर बनाने की कोशिश की। प्रतिक्रिया के लिए धन्यवाद।
एंटीरेज़

3
उपर्युक्त "खुफिया" का एक अन्य पहलू, या ऑपरेशन और / या स्क्रिप्ट के माध्यम से रेडिस के डेटा प्रकारों और सर्वर-साइड लॉजिक का लाभ उठाना, यह है कि आप आवेदन जटिलता और नेटवर्क दोनों को बचाते हैं (जैसा कि एंटीरेज़ में @antirez द्वारा चर्चा की गई है) । com / news / 73 और Yiftach at redislabs.com/blog/the-proven-redis-performance )।
इटमार हैबर

1
Antirez उत्तर के लिए धन्यवाद। एक और कारण यह हो सकता है कि मेमकाटेड बस थोड़ा तेज है। सॉफ्टवेयर का पुराना टुकड़ा भी है और कई फ्रेमवर्क इसे डिफ़ॉल्ट रूप से समर्थन करते हैं
निक

3
उत्कृष्ट उत्तर, यह प्यार करेगा कि समुदाय के साथ रेडिस के पिता कैसे समर्पित हैं।
महन

13

आदतें तोड़ना मुश्किल है :)

गंभीरता से, हालांकि, मेरी समझ में दो मुख्य कारण हैं - क्यों मेमकेच का उपयोग अभी भी किया जाता है:

  1. लीगेसी - ऐसे डेवलपर्स जो आरामदायक और परिचित हैं, साथ ही साथ ऐसे एप्लिकेशन भी हैं जो इसका समर्थन करते हैं। इसका मतलब यह भी है कि यह एक परिपक्व और अच्छी तरह से जांची जाने वाली तकनीक है।
  2. स्केलिंग - मानक मेमकेच्ड आसानी से क्षैतिज रूप से स्केलेबल है, जबकि रेडिस (जब तक कि जल्द ही जारी होने वाले v3 को छोड़कर) को उस छोर (यानी शार्किंग) के लिए अधिक काम करने की आवश्यकता होती है।

तथापि:

  1. पुन। विरासत - दी रेडिस की मजबूती (डेटा संरचनाएं, आदेश, दृढ़ता ...), यह सक्रिय रूप से विकसित की जा रही है और हर बोधगम्य भाषा में ग्राहकों - नए अनुप्रयोगों को आमतौर पर इसके साथ विकसित किया जाता है।
  2. पुन: स्केलिंग - आगामी v3 के अलावा, ऐसे समाधान हैं जो स्केलिंग को बहुत आसान बना सकते हैं। उदाहरण के लिए, Redis Cloud बिना डेटा लॉस या सर्विस रुकावट के सहज स्केलिंग प्रदान करता है। स्केलिंग / रेडिस को स्केल करने का एक अन्य लोकप्रिय तरीका है ट्वेमप्रोक्सी

1
बस एक नोट: जैसा कि ट्विटर पर वर्तमान अनुरक्षक द्वारा पुष्टि की गई थी, मेमकास्ट अभी भी सक्रिय रूप से विकसित / बनाए रखा गया है। मुझे लगता है कि यह तथ्य यह है कि नए सामान को अक्सर नहीं जोड़ता है परिपक्वता परियोजना के पहुंचने और नए सामान को जोड़ने की अनिच्छा के कारण है, इसलिए नए विकास को अनुकूलन / सुधार में ध्यान केंद्रित किया जाता है।
एंटीरेज़

1
टीआईएल कि मेमकाटेड अभी भी जीवित है और लात मार रहा है - मेरे उत्तर को संपादित / ty एंटीरेज़ और डॉर्मंडो
हैबर

1
सुसंगत हैशिंग अभी भी शुद्ध कैश परिदृश्य के लिए रेडिस शार्क की तुलना में सुशोभित विफलता के लिए एक अधिक मजबूत मॉडल है। के रूप में नोड कैश कुंजी गिर स्वचालित रूप से अन्य सर्वर के लिए कदम। जब तक आपके पास एकल सर्वर है तब भी आपका कैश संचालित होता है, जैसे कि रेडिस के विपरीत यदि आप किसी भी हैशग्रुप के लिए मास्टर और गुलाम खो देते हैं तो आपका क्लस्टर विफल हो जाता है।
उस्मान इस्माइल

1
RedisLabs उत्कृष्ट है। यह Userify Cloud के पीछे एक महत्वपूर्ण तकनीक है।
fatal_error

1
मैं किसी भी कार्यान्वयन के लिए बेहद संदिग्ध हूं जो बहु-थ्रेडेड और इवेंट लूप आधारित नहीं हैं। ... ठीक है, अब जहां हर मौजूदा प्रदर्शन माफी देने वाले हैं, मैंने उनका रात का खाना बाहर रखा है। अब रेडिस ऐसा कर सकते थे, और मैं सिस्टम की तरफ से बहुत अधिक प्रो-रेडिस करूंगा। इस बिंदु पर, जब तक कि देव समूह कैचिंग में असामान्य रूप से सक्षम नहीं है, मेमेकैच्ड एक सरल और अधिक कुशल कार्यान्वयन है ... विशेषताएं कभी भी स्वतंत्र हैं, एपोलॉजिस्ट आपको यह नहीं बताते हैं कि वे हैं, या आपकी लागत महत्वहीन है।
जेएम बेकर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.