क्या रेडिस की तुलना में एक डायनासोर को याद किया जाता है? [बन्द है]


185

मैंने पिछले हफ़्ते के यादगार लम्हों के साथ काफी काम किया है और रेडिस के बारे में अभी पता लगाया है। जब मैंने उनके रीडमी के इस हिस्से को पढ़ा, तो मुझे अचानक अपने पेट में एक गर्म, आरामदायक एहसास हुआ:

रेडिस का उपयोग स्टेरॉयड पर एक मेम्केड के रूप में किया जा सकता है क्योंकि यह मेम्केड के रूप में तेज़ है लेकिन कई विशेषताओं के साथ है। मेमेकटेड की तरह, रेडिस भी कुंजी को टाइमआउट सेट करने का समर्थन करता है ताकि किसी दिए गए समय के गुजरने पर यह कुंजी स्वचालित रूप से हटा दी जाए।

यह आश्चर्यजनक लगता है। मुझे यह पृष्ठ भी बेंचमार्क के साथ मिला: http://www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-comparison

तो, ईमानदारी से - क्या वास्तव में पुराना डिनसौर है जो रेडिस नामक इस नवागंतुक की तुलना में प्रदर्शन के दृष्टिकोण से एक बुरा विकल्प है?

मैंने पहले रेडिस के बारे में बहुत कुछ नहीं सुना है, इस प्रकार मेरे प्रश्न के लिए दृष्टिकोण!


दिलचस्प अतिरिक्त पढ़ने: nosql.mypopescu.com/post/519078332/memcached-on-top-of-redis
औद्योगिक

9
यह रूतुराज बेंचमार्क वास्तव में बहुत ध्यान देने योग्य नहीं है
dsomnus

2
हमने काम पर w / मेम्बेस का प्रयोग शुरू कर दिया है, और अब तक खुश हैं। हालांकि, हम मेमेचे
जैशाओ

2
Redis गैर-वास्तविक-संसार के वंचित मानदंड के लिए उपवास के समान है। यह सुझाव नहीं है कि यह धीमा है - यह निश्चित रूप से अधिकांश वर्कलोड के लिए पर्याप्त तेज है, लेकिन मेमकेड की तुलना में तेजी से चीजें केवल मेम्केड में बग को प्रकट करती हैं। यह लगभग हमेशा हार्डवेयर या खराब एप्लिकेशन डिज़ाइन द्वारा अड़चन है।
डस्टिन

4
मुझे आश्चर्य है कि पवित्रता-के-एसओ-गश्ती ने इस प्रश्न को उचित और उपयोगी नहीं के रूप में बंद नहीं किया है।
डॉगवेर

जवाबों:


74

Memcache अभी भी एक उत्कृष्ट उपकरण है और बहुत विश्वसनीय है।

इस मुद्दे को देखने के बजाय <100 एमएस रेंज में तेज होने वाले परिप्रेक्ष्य से देखें, सॉफ्टवेयर के "वर्ग" के प्रदर्शन को देखें।

  • क्या यह केवल स्थानीय राम का उपयोग करता है? -> सबसे तेज
  • क्या यह सुदूर राम का उपयोग करता है? -> उपवास
  • क्या यह रैम प्लस हार्डडिस्क का उपयोग करता है -> ओह हर्म।
  • क्या यह केवल हार्डडिस्क -> रन का उपयोग करता है!

3
मेमेचे के साथ प्रतिकृति को संभालने की कोई सुविधा नहीं है जो मुझे पता है। Memcache विशुद्ध रूप से कैश होने के लिए है। यदि आइटम को शुद्ध / खो दिया गया है, तो इसे फिर से बनाने की आवश्यकता है। मैंने पहले इसका उपयोग नहीं किया है और न ही मैंने इसका मूल्यांकन किया है, लेकिन यह आपके लिए हितकारी हो सकता है। code.google.com/p/memagent
डैनियल

1
मेम्बेस मेम्केड प्रोटोकॉल का समर्थन करता है लेकिन दृढ़ता और प्रतिकृति भी।
जिम फेरनस

1
हाल ही में मैंने 4 बंदरगाहों के पार बंधुआ ईथरनेट को देखा। 4 x 44 एमबी / एस। यह राम को और अधिक मूल्यवान बनाता है, यह मानते हुए कि आप बंधुआ ईथरनेट जा सकते हैं!
डैनियल

1
भविष्य के संदर्भ के लिए, हाल ही में फेसबुक खुला स्रोत mcrouter होगा, जो मेम्केड के लिए प्रतिकृति जोड़ता है। अन्य चीजें भी दिनांकित हैं (रेडिस अब सुपर फास्ट है, आदि), लेकिन FYI करें यदि आप यहां पांच साल बाद हैं ...
dannysauer

अच्छा क्या बात है? दोनों एक साधारण json सरणी direclty को स्टोर कर सकते हैं, सबसे WIDELY वेब पर DATA इंटरचेंज फॉर्मेट का उपयोग करते हैं, मुझे नहीं पता कि वे क्या सोच रहे थे ... ओह इंतजार शायद मुझे ReJSON जोड़ना चाहिए क्योंकि मूल रूप से दुनिया में JSON के बारे में कोई परवाह नहीं करता है
पाइरेटऐप

205

निर्भर करता है कि आपको क्या चाहिए, सामान्य तौर पर मुझे लगता है कि:

  • आपको प्रदर्शन के बारे में बहुत ज्यादा परवाह नहीं करनी चाहिए। रेडिस छोटे मानों के साथ प्रति कोर तेज है, लेकिन मेम्केड क्लाइंट की मदद के बिना एक निष्पादन योग्य और टीसीपी पोर्ट के साथ कई कोर का उपयोग करने में सक्षम है। इसके अलावा 100k के क्रम में बड़े मूल्यों के साथ मेमकाटेड तेजी से है। रेडिस ने हाल ही में बड़े मूल्यों (अस्थिर शाखा) के बारे में बहुत सुधार किया है लेकिन अभी भी इस उपयोग के मामले में मेमेकैस्ट तेज है। यहाँ बिंदु यह है: और न ही एक-दूसरे को आपके द्वारा दिए गए क्वेरी-प्रति-सेकंड के लिए अड़चन होने की संभावना होगी।
  • आपको मेमोरी के उपयोग की परवाह करनी चाहिए। सरल कुंजी-मूल्य जोड़े के लिए मेमेकैच्ड अधिक कुशल है। यदि आप Redis hashes का उपयोग करते हैं, तो Redis अधिक मेमोरी कुशल है। उपयोग के मामले पर निर्भर करता है।
  • आपको दृढ़ता और प्रतिकृति के बारे में परवाह करनी चाहिए, दो सुविधाएँ केवल रेडिस में उपलब्ध हैं। यहां तक ​​कि अगर आपका लक्ष्य एक कैश का निर्माण करना है, तो यह मदद करता है कि अपग्रेड या रिबूट के बाद भी आपका डेटा अभी भी है।
  • आपको जिस तरह के ऑपरेशन की जरूरत है, उसकी देखभाल करनी चाहिए। रेडिस में बहुत सारे जटिल ऑपरेशन होते हैं, यहां तक ​​कि सिर्फ कैशिंग उपयोग के मामले को देखते हुए, आप अक्सर एक ही ऑपरेशन में बहुत कुछ कर सकते हैं, बिना प्रोसेस किए क्लाइंट क्लाइंट साइड (बहुत अधिक आई / ओ कभी-कभी आवश्यक होता है) की आवश्यकता होती है। यह ऑपरेशन अक्सर सादे GET और SET की तरह तेज़ होते हैं। इसलिए यदि आपको केवल GET / SET की आवश्यकता नहीं है, लेकिन अधिक जटिल चीजें हैं तो Redis बहुत मदद कर सकता है (टाइमलाइन कैशिंग पर सोचें)।

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

जब से मैं रेडिस परियोजना का मुख्य विकासक हूं, तब से मैं निश्चित रूप से पक्षपाती हो सकता हूं।


67
अंत में महान प्रकटीकरण के लिए +1
नैटडॉट्स

6
मुझे यकीन नहीं है कि यह एक भाषा की गलती है, लेकिन अगर आप "आम तौर पर मुझे लगता है कि आपको प्रदर्शन के बारे में बहुत ज्यादा परवाह नहीं करनी चाहिए" के साथ अपने तर्क का नेतृत्व करते हैं, तो यह चिंता का गंभीर कारण है। रेडिस समस्याओं के कुछ वर्गों के लिए बहुत अच्छा हो सकता है, लेकिन परंपरागत रूप से, मेम्चे का उपयोग विशेष रूप से दृढ़ डेटाबेस के साथ प्रदर्शन के मुद्दों को हल करने के लिए किया गया है। मुझे भी लगता है कि आपकी सूची से एक शानदार चूक उत्पाद परिपक्वता है। मेम्चे एक परिपक्व उत्पाद है जिसमें लगभग एक दशक का अनुभव है। रेडिस होनहार है, लेकिन यह केवल 3 साल या उसके आसपास है।
डगडब्लू

1
@DougW आप इस वाक्यांश को संदर्भ से बाहर ले जा रहे हैं। जब आप पैराग्राफ को बंद करने वाले वाक्यांश को पढ़ते हैं, तो यह बहुत अधिक समझ में आता है: "यहाँ बिंदु यह है: न ही एक या दूसरे संभवतः क्वेरी-प्रति-सेकंड के लिए आपकी अड़चन बनने जा रहे हैं"
दीनी

83

तो, ईमानदारी से - क्या वास्तव में पुराना डिनसौर है जो रेडिस नामक इस नवागंतुक की तुलना में प्रदर्शन के दृष्टिकोण से एक बुरा विकल्प है?

  • तब सेट सुविधाओं की तुलना Redis अधिक कार्यक्षमता है;
  • स्थापना में आसानी Redis में करना भी बहुत आसान है। कोई निर्भरता की आवश्यकता;
  • सक्रिय विकास की तुलना करना Redis करना भी बेहतर है;
  • मेरा मानना memcachedहै कि इससे थोड़ा तेज है Redis। यह डिस्क को बिल्कुल भी नहीं छूता है;
  • मेरी राय है कि Redisउत्पाद से बेहतर है memcached

31
यदि आप इसे बताते हैं तो रेडिस केवल डिस्क को छूता है। आमतौर पर, यह हर दूसरे या दूसरे समय में एक fsync करता है -> आप इसे नोटिस नहीं करेंगे
मार्क सीजर

1
@ मर्क युप। मेरा यह भी मानना ​​है कि आप इसे डिस्क को बिल्कुल भी नहीं छूने के लिए कह सकते हैं, लेकिन मानक मेरा मानना ​​है कि यह हमेशा अभी fsyncs है?
अल्फ्रेड

3
इसके अलावा, मेरे अनुभव में Redis Memcached (स्मृति में केवल मोड में Redis का उपयोग करते समय) की तुलना में थोड़ा तेज है। Antirez ने यहां एक परीक्षण किया antirez.com/post/redis-memcached-benchmark.html
सुने रिवर्स

10
बिग डिफेंस: मेमकेड मल्टी थ्रेडेड है और रेडिस नहीं है। इसलिए जब किसी एकल अनुरोध की विलंबता तुलनीय हो, तो समसामयिकता अधिक होने पर मेमकेड कई और अनुरोधों की सेवा दे सकता है। दूसरी ओर रेडिस केवल कुछ समवर्ती अनुरोधों के साथ प्रदर्शन शिखर पर पहुंच जाएगा क्योंकि यह केवल 1 सीपीयू कोर / थ्रेड का उपयोग करता है। इसे दरकिनार करने का सुझाव दिया गया है कि सुसंगत हैशिंग के साथ एक मशीन पर रेडिस के कई उदाहरणों को चलाना है, लेकिन यह वास्तव में खराब समाधान है। इसलिए यदि आपको उच्च संगामिति की आवश्यकता है और बहु-कोर सीपीयू (जो नहीं है), मेमकाटेड तेजी से है।
कॉलिनम

2
@ मान्यता दी, यह कोई छिपी हुई बात नहीं है कि रेडिस सिंगल-थ्रेडेड है, यह लेखक द्वारा डिजाइन निर्णय (मजबूती पर सरलता) है। ऊपर डस्टिन से जुड़ा लेख ठोस सबूत है कि इसका वास्तविक प्रभाव है। इसके अलावा मैंने अपने स्वयं के बेंचमार्क में रेडिस को Zend_Cache बैकेंड के रूप में उपयोग करने की पुष्टि की है; जैसे कि समाप्ती बढ़ जाती है, रेडिस मेमकाटेड की तुलना में जल्दी पठार करेगा।
कॉलिनएम

46

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

यह मुख्य अंतर है, यदि आप इसे कैश के रूप में उपयोग कर रहे हैं।



13

आप मेम्बेस को भी देखना चाह सकते हैं।

http://www.northscale.com/products/membase_server.html

मैंने इसका उपयोग नहीं किया है, लेकिन यह रेडिस के समान प्रतीत होता है कि यह दृढ़ता के साथ एक मेमोरी-केंद्रित केवी स्टोर है। जो मैं देख सकता हूँ उससे प्रमुख अंतर हैं:

  • Redis में डेटा हेरफेर की क्षमता (सेट किए गए ऑर्डर आदि) काफी अधिक हैं
  • Redis में क्षैतिज मापनीयता जोड़ने के लिए Redis Cluster प्रोजेक्ट लंबित है
  • Redis में एक संकर एल्गोरिथ्म पर आधारित डिस्क (VM) में डेटा ऑफ़लोड का एकल स्तरीय है जो LRU और ऑब्जेक्ट के आकार दोनों पर विचार करता है।

  • मेम्बेस मेम्केच्ड वायर प्रोटोकॉल का उपयोग करता है - जो मौजूदा अनुप्रयोगों के लिए अपग्रेड पथ के रूप में उपयोगी है

  • मेम्बेस को एक वितरित हैशटेबल दृष्टिकोण का उपयोग करके क्षैतिज रूप से स्केल करने के लिए सेट किया गया है
  • मेम्बेस एक LRU दृष्टिकोण का उपयोग करते हुए डेटा ऑफ़लोड के कई स्तरों का समर्थन कर सकता है (बहुत कम इस्तेमाल किया गया डिस्क पर जाता है, कुछ हद तक सामान SSD को जाता है, अक्सर सामान रैम में रहता है)
  • Membase में TTL क्षमता के बारे में निश्चित नहीं है।

चुनाव उस डिग्री पर निर्भर हो सकता है जिस पर आपका आवेदन Redis में अतिरिक्त डेटा हेरफेर कार्यक्षमता का लाभ उठा सकता है।


हाय डीन, आपकी पोस्ट के लिए धन्यवाद। मैं निश्चित रूप से इसकी जाँच करूँगा। क्या मैं PHP में मेम्बेस का उपयोग कर सकता हूँ?
औद्योगिक


मेमबेस टीटीएल का समर्थन करता है। सभी Memcache कार्यान्वयन समर्थन समय समाप्ति के साथ डालता है। github.com/memcached/memcached/blob/master/doc/protocol.txt#L79
सौरव

0

हेज़ेलकास्ट देशी रूप से प्रचलित प्रोटोकॉल का समर्थन करता है

https://web.archive.org/web/20140601010929/http://hazelcast.org/docs/latest/manual/html-single/hazelcast-documentation.html

और इस तरह से एक आधुनिक विकल्प है। आपको यह देखने के लिए सभी समाधानों को आजमाना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.