रेडिस प्रलेखन में यह समझने के लिए कि यह कैसे काम करता है, जानकारी का खजाना है। अब, विशेष रूप से आपके प्रश्नों का उत्तर देने के लिए:
1) कनेक्शन कैसे बनाए रखा जाता है?
एई इवेंट लूप (रेडिस लेखक द्वारा डिज़ाइन किया गया) का उपयोग करके कनेक्शन बनाए और प्रबंधित किए जाते हैं। सभी नेटवर्क I/O संचालन गैर-अवरुद्ध हैं। आप एई को प्लेटफॉर्म के सर्वश्रेष्ठ नेटवर्क I/O डिमल्टीप्लेक्सिंग तंत्र (लिनक्स के लिए एपोल, बीएसडी के लिए क्यूक्यू, आदि ...) का उपयोग करके एक न्यूनतम कार्यान्वयन के रूप में देख सकते हैं, जैसे कि libevent, libev, libuv, आदि ...
2) क्या कनेक्शन TCP या HTTP हैं?
कनेक्शन टीसीपी हैं जो रेडिस प्रोटोकॉल का उपयोग करते हैं, जो एक साधारण टेलनेट संगत, पाठ उन्मुख प्रोटोकॉल है जो बाइनरी डेटा का समर्थन करता है। यह प्रोटोकॉल आमतौर पर HTTP की तुलना में अधिक कुशल होता है।
3) स्मृति को कैसे प्रबंधित किया जाता है?
मेमोरी को एक सामान्य प्रयोजन मेमोरी एलोकेटर पर भरोसा करके प्रबंधित किया जाता है। कुछ प्लेटफार्मों पर, यह वास्तव में सिस्टम मेमोरी एलोकेटर है। कुछ अन्य प्लेटफार्मों (लिनक्स सहित) पर, जेमलोक को चुना गया है क्योंकि यह सीपीयू खपत, समवर्ती समर्थन, विखंडन और स्मृति पदचिह्न के बीच एक अच्छा संतुलन प्रदान करता है। जेमलोक स्रोत कोड रेडिस वितरण का हिस्सा है।
अन्य उत्पादों (जैसे memcached) के विपरीत, Redis में स्लैब आवंटनकर्ता का कोई कार्यान्वयन नहीं है।
स्मृति पदचिह्न को कम करने के लिए सामान्य प्रयोजन आवंटक के शीर्ष पर कई अनुकूलित डेटा संरचनाएं लागू की गई हैं।
4) प्रतिस्पर्धी पढ़ने/लिखने के बावजूद उच्च थ्रूपुट प्राप्त करने के लिए उपयोग की जाने वाली सिंक्रनाइज़ेशन तकनीकें क्या हैं?
रेडिस एक सिंगल-थ्रेडेड इवेंट लूप है, इसलिए कोई सिंक्रनाइज़ेशन नहीं किया जाना चाहिए क्योंकि सभी कमांड क्रमबद्ध हैं। अब, कुछ धागे आंतरिक उद्देश्यों के लिए पृष्ठभूमि में भी चलते हैं। दुर्लभ मामलों में वे मुख्य धागे द्वारा प्रबंधित डेटा तक पहुंचते हैं, शास्त्रीय पाथ्रेड सिंक्रनाइज़ेशन प्राइमेटिव्स का उपयोग किया जाता है (उदाहरण के लिए म्यूटेक्स)। लेकिन कई क्लाइंट कनेक्शनों की ओर से किए गए 100% डेटा एक्सेस के लिए किसी सिंक्रनाइज़ेशन की आवश्यकता नहीं होती है।
आप वहां अधिक जानकारी प्राप्त कर सकते हैं:रेडिस सिंगल-थ्रेडेड है, फिर यह समवर्ती I/O कैसे करता है?
मेमोरी कैश वाली मशीन और कमांड का जवाब देने वाले सर्वर और रेडिस बॉक्स के बीच एक सादे वैनिला कार्यान्वयन में क्या अंतर है?
इसमें कोई फर्क नही है। रेडिस मेमोरी कैश और सर्वर के साथ मशीन का एक सादा वेनिला कार्यान्वयन है जो कमांड का जवाब दे सकता है। लेकिन यह एक कार्यान्वयन है जो सही किया जाता है:
- सिंगल थ्रेडेड इवेंट लूप मॉडल का उपयोग करना
- सरल और न्यूनतर डेटा संरचनाओं का उपयोग करना जो उनके संगत उपयोग के मामलों के लिए अनुकूलित हैं
- अतिसूक्ष्मवाद और उपयोगिता को संतुलित करने के लिए सावधानीपूर्वक चुने गए आदेशों का एक सेट पेश करना
- सर्वश्रेष्ठ कच्चे प्रदर्शन को लगातार लक्षित करना
- आधुनिक OS तंत्र के लिए अच्छी तरह अनुकूलित
- कई दृढ़ता तंत्र प्रदान करना क्योंकि "एक आकार सभी के लिए उपयुक्त है" दृष्टिकोण केवल एक सपना है।
- HA तंत्र के लिए बिल्डिंग ब्लॉक्स प्रदान करना (उदाहरण के लिए प्रतिकृति प्रणाली)
- पैनकेक जैसी बेकार अमूर्त परतों को ढेर करने से बचना
- जिसके परिणामस्वरूप एक साफ और समझने योग्य कोड आधार होता है जिसके साथ कोई भी अच्छा सी डेवलपर सहज हो सकता है