दिलचस्प पोस्ट
पेप पथ के लिए asp.net mvc जटिल रूटिंग पुनरावर्ती समारोह के कारण ढेर अतिप्रवाह Android के साथ एक लंबी प्रेस का पता लगा रहा है मापदंडों के रिक्त स्थान हैं जब आप powershell से msdeploy को कैसे कॉल करते हैं? स्क्वायर DIV जहां ऊंचाई व्यूपोर्ट के बराबर है जावा में प्रिंट करने योग्य चार STD :: आगे कैसे काम करता है? मैं सी # में एक मल्टी-कैरेक्टर डिलीमीटर द्वारा स्ट्रिंग कैसे विभाजित करूं? मैं मेट्रो टेम्पलेट में प्रत्येक लूप में एक सरणी का सूचक कैसे प्राप्त करूं? html5: छवि को एक कैनवास कॉपी और वापस अस्थायी रूप से एक्लिप्स प्लगइन अक्षम करें कैसे सी # के साथ दो पारदर्शी परत बनाने के लिए? जावा में वाष्पशील चर अजगर वर्ग के लिए 'फंक्शन' का उपयोग करने का क्या लाभ है? समूह एक ही सेल में एक ही मान फ़ील्ड का समूह

Memcached बनाम Redis?

हम कैडिंग के लिए रेडिस सर्वर से रूबी वेब ऐप का प्रयोग कर रहे हैं। क्या इसके बजाय मेम्क्चड परीक्षण की कोई बात है?

हमें बेहतर प्रदर्शन क्या देगा? Redis और Memcached के बीच कोई पेशेवर या विपक्ष?

घ्यान देने योग्य बातें:

  • गति पढ़ें / लिखें
  • स्मृति उपयोग।
  • डिस्क आई / ओ डंपिंग
  • स्केलिंग।

Solutions Collecting From Web of "Memcached बनाम Redis?"

रेडिस का उपयोग करें अगर

  1. आपको कैश में चुनिंदा हटाने / समाप्त होने वाले आइटम की आवश्यकता होती है। (आपको इसकी आवश्यकता है)

  2. आपको किसी विशेष प्रकार की चाबियाँ खोजने की क्षमता की आवश्यकता होती है। eq। 'ब्लॉग 1: पोस्ट: *', 'ब्लॉग 2: श्रेणियां: xyz: पोस्ट: *' अरे हां! यह बहुत महत्वपूर्ण है। कैश किए गए कुछ विशेष प्रकारों को चुनिंदा रूप से अमान्य करने के लिए इसका उपयोग करें आप इसका उपयोग टुकड़ा कैश, पृष्ठ कैश, किसी दिए गए प्रकार के केवल एआर ऑब्जेक्ट आदि को भी रद्द करने के लिए भी कर सकते हैं।

  3. दृढ़ता (आप भी इस की आवश्यकता होगी, जब तक कि आपके पुनरारंभ के बाद गर्म होने के लिए आपके कैश के साथ ठीक नहीं हो। वस्तुओं के लिए बहुत आवश्यक है जो शायद ही कभी बदलते हैं)

मेम्कैच का प्रयोग करें अगर

  1. Memcached आपको सिर में दर्द देता है!
  2. उम्म … क्लस्टरिंग? हुंह। अगर आप उस दूर जाने के लिए, कैशिंग टुकड़ों और एआर ऑब्जेक्ट्स के लिए वार्निश और रेडिस का उपयोग करें।

मेरे अनुभव से मैंने मेम्बैच की तुलना में रेडिस के साथ बेहतर स्थिरता हासिल की है

Memcached multithreaded और तेज है

रेडिस में बहुत सी विशेषताएं हैं और यह बहुत तेज है, लेकिन पूरी तरह से एक कोर तक ही सीमित है क्योंकि यह ईवेंट लूप पर आधारित है।

हम दोनों का उपयोग करते हैं Memcached ऑब्जेक्ट को कैशिंग के लिए उपयोग किया जाता है, मुख्यतः डाटाबेस पर पठन लोड को कम करता है। रेडिस का इस्तेमाल सॉर्ट किए गए सेटों जैसी चीज़ों के लिए किया जाता है जो टाइम-सीरीज डेटा को रोलिंग करने के लिए आसान है।

पहले से स्वीकृत उत्तर के लिए टिप्पणी के रूप में पोस्ट करने के लिए यह बहुत लंबा है, इसलिए मैंने इसे एक अलग जवाब दिया

एक बात यह भी विचार करने के लिए है कि क्या आप अपने कैश उदाहरण पर एक हार्ड ऊपरी मेमोरी सीमा की अपेक्षा करते हैं।

चूंकि redis कई विशेषताओं और कैशिंग के साथ एक nosql डेटाबेस है केवल एक ही विकल्प के लिए इसका इस्तेमाल किया जा सकता है, यह स्मृति को आवंटित करता है क्योंकि इसकी आवश्यकता होती है – जितनी अधिक वस्तुओं में आप इसे डालते हैं, उतनी अधिक स्मृति इसका उपयोग करती है maxmemory स्मृति विकल्प ऊपरी स्मृति सीमा उपयोग को कड़ाई से लागू नहीं करता है जैसा कि आप कैश के साथ काम करते हैं, कुंजी बेदखल और समाप्त हो जाती है; संभावना है कि आपकी चाबियाँ एक समान आकार नहीं हैं, इसलिए आंतरिक स्मृति विखंडन होता है।

डिफ़ॉल्ट रीडिस के द्वारा जेमोलोक मेमोरी ऑलोकेटर का इस्तेमाल होता है , जो मेमोरी कॉम्पैक्ट और तेज दोनों के लिए सबसे अच्छा प्रयास करता है, लेकिन यह एक सामान्य प्रयोजन मेमोरी आवंटन है और यह कई आवंटन और उच्च दर से होने वाली वस्तु शुद्ध करने के साथ नहीं रख सकता है। इसके कारण, कुछ लोड पैटर्न पर फिर से प्रक्रिया को आंतरिक विखंडन के कारण स्पष्ट रूप से याद किया जा सकता है। उदाहरण के लिए, यदि आपके पास 7 जीबी रैम वाला एक सर्वर है और आप बिना किसी लगातार एलआरयू कैश के रूप में पुनः उपयोग करना चाहते हैं, तो आप पा सकते हैं कि समय के साथ maxmemory सेट रीडिस प्रक्रिया अधिक से अधिक मेमोरी का उपयोग करेगी, अंत में कुल रैम की सीमा जब तक आउट-ऑफ-मेमरी किलर हस्तक्षेप नहीं करता।

memcached ऊपर वर्णित परिदृश्य के लिए एक बेहतर फिट है, क्योंकि यह अपनी स्मृति को पूरी तरह से अलग तरीके से प्रबंधित करता है। मेम्कैच ने मेमोरी का एक बड़ा हिस्सा आवंटित किया – यह हमेशा की आवश्यकता होगी – और फिर इस स्मृति को अपने स्वयं के लागू स्लैब आबंटक का उपयोग करके प्रबंधित कर लेगा इसके अलावा, मेम्काचैड आंतरिक विखंडन को कम रखने की कोशिश करता है, क्योंकि यह वास्तव में प्रति-स्लैब एलआरयू एल्गोरिथ्म का उपयोग करता है , जब एलआरयू निष्कासन ऑब्जेक्ट आकार के साथ किया जाता है।

उस ने कहा, मेमकैच के पास वातावरण में एक मजबूत स्थिति होती है, जहां मेमोरी उपयोग को लागू किया जाता है और / या अनुमान लगाया जा सकता है। हमने 10-15k सेशन के काम के बोझ में एक ड्रॉप-इन गैर-स्थायी एलआरयू-आधारित मेम्केचेड प्रतिस्थापन के रूप में नवीनतम स्थिर रेडिस (2.8.1 9) का उपयोग करने की कोशिश की है, और यह स्मृति ए लॉक लीक; वही काम का बोझ अमेज़ॅन की एल्स्टी कैश को एक दिन में या तो एक ही कारणों से दुर्घटनाग्रस्त कर रहा था।

Memcached एक सरल कुंजी / मूल्य स्टोर होने में अच्छा है और कुंजी => STRING करने में अच्छा है यह सत्र के भंडारण के लिए वास्तव में अच्छा बनाता है

रेडिस कुंजी => SOME_OBJECT को करने में अच्छा है

यह सचमुच इस बात पर निर्भर करता है कि आप वहां क्या डाल रहे हैं। मेरी समझ यह है कि प्रदर्शन के संदर्भ में वे बहुत सुंदर हैं।

किसी भी उद्देश्य के बेंचमार्क को ढूंढने के लिए शुभकामनाएं, अगर आपको कुछ मिलते-जुलते ढंग से उन्हें अपना रास्ता भेजते हैं

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

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

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

मुझे मेककैच और रेडिसी दोनों को एक साथ कैशिंग प्रॉक्सी में उपयोग करने का अवसर मिला, जिस पर मैंने काम किया है, मुझे आपको यह साझा करने दो I

रेडिस>

1) क्लस्टर पर, कैश सामग्री को अनुक्रमणित करने के लिए प्रयुक्त। मेरे पास फिर से क्लस्टर्स पर फैले अरब से अधिक चाबियाँ हैं, प्रतिक्रिया समय को कम करते हैं और काफी स्थिर है।

2) असल में, यह एक कुंजी / मूल्य स्टोर है, इसलिए जहां कभी भी आप में आवेदन कुछ इसी तरह की है, एक बहुत कुछ परेशान करने के साथ redis का उपयोग कर सकते हैं

3) रेडिस निरंतरता, फेलओवर और बैकअप (एओएफ) आपकी नौकरी को आसान बना देगा।

Memcache>

1) हाँ, एक अनुकूलित स्मृति जिसे कैश के रूप में इस्तेमाल किया जा सकता है मैंने इसे कैश सामग्री को संग्रहीत करने के लिए बहुत बार उपयोग किया (50 हिट / सेकंड के साथ) 1 MB से कम आकार के साथ प्रयोग किया।

2) मैंने मेम्कैच के लिए 16 जीबी में से केवल 2 जीबी को आवंटित किया था, जब भी मेरी एकल सामग्री का आकार> 1 एमबी था।

3) जैसा कि सामग्री सीमा के पास बढ़ती है, कभी-कभी मैंने आँकड़ों में उच्च प्रतिक्रिया समय (redis के मामले में नहीं) को देखा है।

यदि आप समग्र अनुभव Redis बहुत हरे रंग के लिए पूछना है क्योंकि यह विन्यस्त करने के लिए आसान है, स्थिर मजबूत सुविधाओं के साथ बहुत लचीलापन

इसके अलावा, इस लिंक पर एक बेंचमार्किंग परिणाम उपलब्ध है, नीचे से कुछ ही हाईलाइट हैं,

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें

उम्मीद है की यह मदद करेगा!!

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

कुछ ऐप्स जिन पर मैंने काम किया है, यह केवल यह स्पष्ट करने के लिए करता है कि हम कैसे व्यवहार करने के लिए डेटा का इरादा रखते हैं – मेम्काशे में सामान, हम उन मामलों को संभालने के लिए कोड लिखते हैं, जहां यह नहीं है – फिर से सामग्री, हम उस पर निर्भर हैं ।

लालसा को आम तौर पर अधिक उपयोग वाले मामलों के लिए बेहतर माना जाता है, जो कि अधिक सुविधा संपन्न और लचीला है।

परीक्षा। कुछ साधारण बेंचमार्क चलाएं लंबे समय के लिए जब मैं अपने आप को एक पुराने स्कूल राइनो समझा, क्योंकि मैं ज्यादातर मेम्कैच का इस्तेमाल करता था और नया बच्चा रेडिस मानता था

मेरी वर्तमान कंपनी रेडिस के साथ मुख्य कैश के रूप में इस्तेमाल किया गया था। जब मैंने कुछ प्रदर्शन आँकड़ों में खोदा और बस परीक्षण शुरू किया, तो रेडिस, प्रदर्शन के मामले में, MySQL की तुलना में तुलनीय या कम धीमी थी

Memcached, हालांकि सरलीकृत, पानी के बाहर पूरी तरह से Redis उड़ा दिया। यह बहुत बेहतर बढ़ाया:

  • बड़े मूल्यों के लिए (स्लैब आकार में आवश्यक बदलाव, लेकिन काम किया)
  • एकाधिक समवर्ती अनुरोधों के लिए

इसके अलावा, मेमकैच्ड बेदखली की नीति मेरे दृष्टिकोण में है, जो बेहतर ढंग से लागू होती है, जिसके परिणामस्वरूप कैश से अधिक डेटा संभालते समय समग्र अधिक स्थिर औसत प्रतिक्रिया समय हो सकता है।

कुछ बेंचमार्किंग से पता चला है कि रेडिस हमारे मामले में बहुत खराब प्रदर्शन करता है। मुझे विश्वास है कि कई चर के साथ क्या करना है:

  • हार्डवेयर का प्रकार जिसे आप रेडिस ऑन चलाते हैं
  • आपके द्वारा संग्रहीत डेटा के प्रकार
  • हो जाता है और सेट की राशि
  • कैसे अपने ऐप है समवर्ती
  • क्या आपको डेटा संरचना संग्रहण की आवश्यकता है?

निजी तौर पर, मैं दृश्य को साझा नहीं करता, जिसके लिए रेडिस लेखकों की संगामिति और मल्टीथ्रेडिंग होती है।

एक बड़ा अंतर यह नहीं बताया गया है कि मेमकेच में हर समय एक ऊपरी स्मृति सीमा है, जबकि रेडिस डिफ़ॉल्ट रूप से नहीं है (लेकिन इसे कॉन्फ़िगर किया जा सकता है)। यदि आप हमेशा कुछ समय के लिए एक कुंजी / मान को स्टोर करना चाहते हैं (और कम स्मृति के कारण इसे बेदखल नहीं करना) तो आप रेडिस के साथ जाना चाहते हैं। बेशक, आप भी स्मृति से बाहर निकलने के मुद्दे पर जोखिम …

यह गलत नहीं होगा, यदि हम कहते हैं कि redis संयोजन (कैश + डेटा संरचना) है, जबकि memcached सिर्फ एक कैश है

हमने काम पर हमारे प्रोजेक्ट के लिए रेडिस को लोड टेकऑफ़ के रूप में सोचा था। हमने सोचा कि nginx में एक मॉड्यूल का उपयोग करके HttpRedis2Module या कुछ इसी तरह हमें बहुत तेज गति होती है, लेकिन जब एबी-टेस्ट के साथ परीक्षण करते हैं तो हम गलत साबित होते हैं।

शायद मॉड्यूल खराब था या हमारे लेआउट, लेकिन यह एक बहुत आसान काम था और यह php के साथ डेटा लेने के लिए और तेज़ था, और फिर इसे MongoDB में दिखाया गया। हम एपीसी को कैशिंग-सिस्टम के रूप में प्रयोग कर रहे हैं और उस पीएचपी और मोंगोडीबी के साथ। यह बहुत तेज़ था, फिर एनजीएक्स रेडिस मॉड्यूल

मेरी टिप यह स्वयं का परीक्षण करना है, ऐसा करने से आप अपने पर्यावरण के लिए परिणाम दिखाएंगे। हमने फैसला किया कि रेडिस का प्रयोग हमारी परियोजना में अनावश्यक था क्योंकि यह कोई मतलब नहीं होगा।

शेष सबसे बड़ा कारण विशेषज्ञता है

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

यदि आप एक विशिष्ट रीडिस उदाहरण को सेटअप करने जा रहे हैं तो उस विशेष परिदृश्य से बचने के लिए केवल एक एलआरयू उदाहरण के रूप में उपयोग करने के लिए, मेमोचैड पर रेडिस का उपयोग करने के लिए वास्तव में कोई ठोस कारण नहीं है।

यदि आपको एक विश्वसनीय "एलएलयू कैश नहीं चला जाता है" की आवश्यकता है … मेमकेच बिल को फिट करेगा क्योंकि यह डिजाइन से स्मृति को खत्म करना असंभव है और विशेषकर कार्यक्षमता डेवलपर्स को ऐसा करने की कोशिश करने से रोकती है जिससे वह खतरे में पड़ सकता है। चिंताओं का सरल विभाजन

Redis बेहतर है Redis के पेशेवरों,

 1.It has a lot of data storage options such as string , sets , sorted sets , hashes , bitmaps 2.Disk Persistence of records 3.Stored Procedure (LUA acripting) support 4.Can act as a Message Broker using PUB/SUB 

जबकि Memcache एक इन-मेमोरी कुंजी मान कैश प्रकार सिस्टम है।

  1. सूचियों जैसे विभिन्न डेटा प्रकार के भंडारों के लिए कोई समर्थन नहीं, रीडिस के रूप में सेट।
  2. प्रमुख समझौता Memcache कोई डिस्क दृढ़ता है

एक बहुत ही सरल परीक्षण सेट और 100K अनूठी कुंजी और redis-2.2.2 और memcached के बीच मूल्य प्राप्त करने के लिए। दोनों लिनक्स वीएम (CentOS) पर चल रहे हैं और मेरे क्लाइंट कोड (नीचे चिपकाए गए) विंडोज़ डेस्कटॉप पर चलते हैं।

Redis

  • 100000 मूल्यों को स्टोर करने के लिए लिया गया समय = 18 9 544 है

  • 100000 मूल्यों को लोड करने के लिए लिया गया समय = 18328ms है

memcached

  • 100000 मूल्यों को स्टोर करने के लिए लिया गया समय = 7 9 7 है

  • 100000 मूल्यों को पुनः प्राप्त करने के लिए लिया गया समय = 38984ms है


 Jedis jed = new Jedis("localhost", 6379); int count = 100000; long startTime = System.currentTimeMillis(); for (int i=0; i<count; i++) { jed.set("u112-"+i, "v51"+i); } long endTime = System.currentTimeMillis(); System.out.println("Time taken to store "+ count + " values is ="+(endTime-startTime)+"ms"); startTime = System.currentTimeMillis(); for (int i=0; i<count; i++) { client.get("u112-"+i); } endTime = System.currentTimeMillis(); System.out.println("Time taken to retrieve "+ count + " values is ="+(endTime-startTime)+"ms"); 

मैं रेडिस कहूंगा, क्योंकि यह मेमकैच की तुलना में बहुत तेज है, भले ही यह मशीन के एक कोर पर चलता है, और मेम्कैच को समानांतर में चलाया जा सकता है, यह सही ढंग से कॉन्फ़िगर किया गया है जब रेडिस की ऊपरी सीमा को मारने के लिए बहुत सारी प्रोसेसिंग लेगा

अच्छी तरह से मैं ज्यादातर अपने ऐप के साथ प्रयोग किया, Memcache सत्र कैश के लिए और सिद्धांत / orm क्वेरीज़ वस्तुओं के लिए redis प्रदर्शन के संदर्भ में दोनों ही लगभग समान हैं।