Redis Cluster, Redis के भीतर उपलब्ध मूल शार्डिंग कार्यान्वयन है जो आपको बाहरी उपकरणों और उपयोगिताओं पर भरोसा किए बिना अपने डेटा को कई नोड्स में स्वचालित रूप से वितरित करने की अनुमति देता है। स्केलग्रिड में, हमने हाल ही में Redis™ योजनाओं के लिए अपने होस्टिंग के माध्यम से अपने पूरी तरह से प्रबंधित प्लेटफॉर्म पर Redis™* क्लस्टर के लिए समर्थन जोड़ा है। इस पोस्ट में, हम आपको उन्नत रेडिस क्लस्टर शार्डिंग अवसरों से परिचित कराने जा रहे हैं, इसके लाभों और सीमाओं पर चर्चा करेंगे कि आपको कब परिनियोजित करना चाहिए, और अपने रेडिस क्लस्टर से कैसे जुड़ना है।
Redis क्लस्टर के साथ साझा करना
Redis क्लस्टर में संपूर्ण कीस्पेस को 16384 स्लॉट्स (हैश स्लॉट्स कहा जाता है) में विभाजित किया गया है और ये स्लॉट कई Redis नोड्स को असाइन किए गए हैं। दी गई कुंजी को इनमें से किसी एक स्लॉट में मैप किया जाता है, और एक कुंजी के लिए हैश स्लॉट की गणना इस प्रकार की जाती है:
HASH_SLOT =CRC16(कुंजी) मोड 16384
मल्टी-की ऑपरेशंस रेडिस क्लस्टर्स पर समर्थित हैं, जब तक कि सिंगल कमांड एक्जीक्यूशन में शामिल सभी कीज एक ही हैश स्लॉट से संबंधित हैं। यह हैश टैग की अवधारणा का उपयोग करके सुनिश्चित किया जा सकता है।
Redis क्लस्टर विशिष्टता प्रौद्योगिकी के आंतरिक पहलुओं को समझने के लिए निश्चित मार्गदर्शिका है, जबकि Redis क्लस्टर ट्यूटोरियल परिनियोजन और व्यवस्थापन दिशानिर्देश प्रदान करता है।
फायदे
Redis क्लस्टर्स के शीर्ष लाभ देखें कि यह आपकी तैनाती को कैसे लाभ पहुंचा सकता है:
-
उच्च प्रदर्शन
रेडिस क्लस्टर स्टैंडअलोन रेडिस परिनियोजन के समान प्रदर्शन का वादा करता है।
-
उच्च उपलब्धता
रेडिस क्लस्टर उच्च उपलब्धता और स्थायित्व सुनिश्चित करने के लिए मानक रेडिस मास्टर-प्रतिकृति कॉन्फ़िगरेशन का समर्थन करता है। यह पूरे क्लस्टर की उपलब्धता सुनिश्चित करने के लिए एक बेड़ा जैसी आम सहमति दृष्टिकोण को भी लागू करता है।
-
क्षैतिज और लंबवत मापनीयता
क्लस्टर से नए रेडिस नोड्स को जोड़ना या हटाना पारदर्शी रूप से और बिना किसी डाउनटाइम के हो सकता है। यह शार्क को जोड़ना और हटाना, अलग-अलग नोड्स को छोड़ना या स्केल करना आसान बनाता है।
-
मूल समाधान
Redis Clusters को परिनियोजित करने के लिए किसी बाहरी प्रॉक्सी या टूल की आवश्यकता नहीं होती है, इसलिए आपको सीखने या चिंता करने के लिए कोई नया टूल नहीं है। यह स्टैंडअलोन रेडिस परिनियोजन के साथ लगभग पूर्ण संगतता भी प्रदान करता है।
सीमाएं
आइए यह सुनिश्चित करने की सीमाओं से भी अवगत हों कि यह आपके परिनियोजन के लिए सही है:
-
ग्राहक सहायता की आवश्यकता है
रेडिस क्लस्टर का समर्थन करने के लिए ग्राहकों को परिवर्तन करने की आवश्यकता है। जबकि रेडिस क्लस्टर अब कई वर्षों से हैं, अभी भी ऐसे ग्राहक हैं जो इसका समर्थन नहीं करते हैं। रेडिस क्लस्टर को परिनियोजित करने से पहले यह सुनिश्चित करने के लिए कि आप जिस क्लाइंट का उपयोग कर रहे हैं वह समर्थित है, यह सुनिश्चित करने के लिए रेडिस क्लाइंट दस्तावेज़ देखें।
-
सीमित बहु-कुंजी संचालन समर्थन
जैसा कि पिछले खंड में उल्लेख किया गया है, बहु-कुंजी संचालन केवल तभी समर्थित होते हैं जब एक ही ऑपरेशन में सभी कुंजियां एक ही स्लॉट से संबंधित होती हैं। अपनी डेटा संरचनाओं को डिज़ाइन करते समय इस बात का ध्यान रखना चाहिए।
-
केवल एक डेटाबेस का समर्थन करता है
स्टैंडअलोन डेटाबेस के विपरीत, Redis क्लस्टर केवल एक डेटाबेस (डेटाबेस 0) का समर्थन करता है, और SELECT कमांड की अनुमति नहीं है। चूंकि अधिकांश लोग एकाधिक डेटाबेस का उपयोग नहीं करते हैं, यह भी कोई बड़ी सीमा नहीं है।
आपको रेडिस क्लस्टर कब तैनात करना चाहिए?
Redis क्लस्टर समाधान आपके लिए उपयुक्त हो सकता है यदि आपको शार्प किए गए Redis समाधान की आवश्यकता है। रेडिस क्लस्टर एक मूल समाधान है जो सरल है और शानदार प्रदर्शन प्रदान करता है।
आम तौर पर, लोग अपने Redis परिनियोजन को शार्प करना शुरू करते हैं, जब वे एक स्टैंडअलोन रेडिस नोड को राइट्स के साथ संतृप्त करना शुरू करते हैं और कई नोड्स में राइट्स फैलाना चाहते हैं। भले ही रेडिस मुख्य रूप से सिंगल थ्रेडेड है, I/O आमतौर पर सीपीयू को संतृप्त करना शुरू करने से पहले एक स्टैंडअलोन पर नेटवर्क या मेमोरी बन जाता है। एक स्टैंडअलोन सिस्टम में अधिक मेमोरी जोड़ने का चयन करके मेमोरी बाउंड को एक हद तक दूर किया जा सकता है, लेकिन यह एक निश्चित बिंदु से परे लागत, बैकअप, पुनरारंभ, वार्म अप समय आदि के मामले में निषेधात्मक बनना शुरू हो जाता है।
दूसरी ओर, यदि आप केवल अपने पठन को कई नोड्स में फैलाना चाहते हैं, तो स्टैंडअलोन में केवल पठन प्रतिकृतियों को जोड़ना बहुत आसान है।
Redis के लिए अन्य शार्डिंग समाधानों की तुलना में, Redis क्लस्टर में शार्प रीबैलेंसिंग अनुप्रयोगों के लिए पारदर्शी है। इससे एप्लिकेशन को प्रभावित किए बिना शार्क को जोड़ना या हटाना बहुत आसान हो जाता है।
#Redis क्लस्टर शेयरिंग का परिचय - लाभ, सीमाएं, कब तैनाती करनी है, और क्लाइंट कनेक्शन ट्वीट करने के लिए क्लिक करें
Redis क्लस्टर से कनेक्ट करना
यदि आप स्केलग्रिड के साथ एक Redis™ क्लस्टर परिनियोजित करना चुनते हैं, तो आपको पूरी तरह से चित्रित Redis क्लस्टर परिनियोजन मिलता है जो मानक रिलीज़ के साथ पूरी तरह से संगत है।
यदि आप अभी शुरुआत कर रहे हैं, तो स्केलग्रिड कंसोल पर 30-दिन के निःशुल्क परीक्षण के लिए साइन अप करें, और Redis™ परिनियोजन के लिए अपना पहला स्केलग्रिड बनाने पर इस दस्तावेज़ को देखें।
स्केलग्रिड पर Redis™ क्लस्टर से कनेक्ट करने के लिए आपको जो चाहिए वह यहां दिया गया है:
- नोड नामों की सूची
- बंदरगाह
- प्रमाणीकरण स्ट्रिंग
आपके Redis™ परिनियोजन विवरण पृष्ठ के अवलोकन टैब में पोर्ट नंबर और प्रमाणीकरण जानकारी के साथ प्रत्येक शार्ड के मास्टर्स की सूची है:
वैकल्पिक रूप से, क्लस्टर के सभी नोड्स की सूची मशीन्स टैब पर उपलब्ध है:
जैसा कि आपने देखा होगा, ऑनलाइन उपलब्ध प्रमाणीकरण-सक्षम Redis™ क्लस्टर से कनेक्ट करने का तरीका दिखाने वाले बहुत सारे उदाहरण उपलब्ध नहीं हैं, यहां कुछ उदाहरण दिए गए हैं जिनमें से कुछ का उपयोग किया जा रहा है लोकप्रिय ग्राहक।
जावा से जुड़ना
लोकप्रिय Redis Java क्लाइंट में, Jedis और Lettuce Redis™ क्लस्टर का समर्थन करते हैं। हम अपने उदाहरण के लिए जेडिस को लेंगे।
जेडिस
Redis™ क्लस्टर कनेक्शन JedisCluster द्वारा सारगर्भित हैं कक्षा। Redis™ क्लस्टर से कनेक्ट करने के लिए इस वर्ग का उपयोग करने का सबसे अच्छा उदाहरण जेडिस परीक्षण, जेडिस स्रोत कोड में पाया जा सकता है। दुर्भाग्य से इस समय, जब प्रमाणीकरण निर्दिष्ट किया जाता है, JedisCluster कंस्ट्रक्टर बहुत साफ नहीं है। यहां एक उदाहरण दिया गया है जो रेडिस ™ क्लस्टर के लिए 100 कुंजी लिखता है। ध्यान दें कि चूंकि कुंजियों को टैग नहीं किया गया है, वे अलग-अलग नोड्स पर अलग-अलग स्लॉट में समाप्त हो जाएंगी:
आयात करें सार्वजनिक वर्ग RedisClusterModeTest { सार्वजनिक स्थैतिक अंतिम int DEFAULT_TIMEOUT =5000; सार्वजनिक स्थैतिक अंतिम int DEFAULT_REDIRECTIONS =5; सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) { jedisClusterNodes =नया हैशसेट () सेट करें; jedisClusterNodes.add(new HostAndPort("SG-example-1.servers.scalegrid.io, 6379)); jedisClusterNodes.add(new HostAndPort("SG-example-2.servers.scalegrid.io", 6379)); jedisClusterNodes .add(new HostAndPort("SG-example-3.servers.scalegrid.io", 6379)); jedisClusterNodes.add(new HostAndPort("SG-example-4.servers.scalegrid.io", 6379)); jedisClusterNodes .add(new HostAndPort("SG-example-5.servers.scalegrid.io", 6379)); jedisClusterNodes.add(new HostAndPort("SG-example-6.servers.scalegrid.io", 6379)); JedisCluster jedis =नया JedisCluster(jedisClusterNodes, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT, DEFAULT_REDIRECTIONS,कन्स्ट्रक्टर के तर्क जेडिस एपीआई डॉक्स में प्रलेखित हैं। हम अनुशंसा करते हैं कि आप क्लस्टर के सभी नोड्स को जेडिस के साथ क्लस्टर निर्माण के दौरान निर्दिष्ट करें।
रूबी से जुड़ना
रूबी में सबसे लोकप्रिय रेडिस क्लाइंट रेडिस-आरबी है। यह Redis™ क्लस्टर का भी समर्थन करता है इसलिए हम इसे अपने उदाहरण में उपयोग करेंगे।
रेडिस-आरबी
redis-rb संस्करण 4.1.0 और इसके बाद के संस्करण में Redis™ क्लस्टर के लिए समर्थन है। 'क्लस्टर' विकल्प को कनेक्शन आरंभीकरण के दौरान निर्दिष्ट करने की आवश्यकता है, और आप सटीक शब्दार्थ के लिए इस दस्तावेज़ीकरण का उल्लेख कर सकते हैं। यहाँ वही प्रोग्राम है जो ऊपर रूबी में जावा उदाहरण के रूप में है:
आवश्यकता 'redis'require' pp'NODES =["redis://SG-example-1.servers.scalegrid.io:6379", "redis://SG-example-2.servers.scalegrid.io :6379", "redis://SG-example-3.servers.scalegrid.io:6379", "redis://SG-example-4.servers.scalegrid.io:6379", "redis://SG -example-5.servers.scalegrid.io:6379", "redis://SG-example-6.servers.scalegrid.io:6379"]पीपी शुरू करें "कनेक्शन का प्रयास..." redis =Redis.new(क्लस्टर :नोड्स, पासवर्ड:) 100.times {|i| redis.set("key#{i}", "value#{i}") } pp "Done..." redis.closerescue StandardError => e पुट e.messageend
Node.js से जुड़ना
Node_redis Node.js में सबसे लोकप्रिय Redis क्लाइंट है। हालाँकि, यह अभी तक आधिकारिक तौर पर Redis™ क्लस्टर का समर्थन नहीं करता है। ioredis एक अन्य लोकप्रिय Redis क्लाइंट है जिसके पास Redis™ क्लस्टर समर्थन है, इसलिए हम इसे अपने Node.js उदाहरण के लिए उपयोग करेंगे।
ioredis
Ioredis प्रलेखन उन अतिरिक्त मापदंडों के विवरण का वर्णन करता है जिन्हें Redis™ क्लस्टर से कनेक्ट करने के लिए पारित किया जाना चाहिए, और एक बुनियादी उदाहरण भी README में प्रदान किया गया है। यहां एक उदाहरण प्रोग्राम है जो उपयोगकर्ता को एक कुंजी के लिए संकेत देता है और Redis™ क्लस्टर से उसका मान पढ़ता है:
कॉन्स्ट रीडलाइन =आवश्यकता ('रीडलाइन'); कॉन्स्ट रेडिस =आवश्यकता ('ioredis'); var क्लस्टर =नया Redis.Cluster ([{पोर्ट:6379, होस्ट:'SG-example-1.servers.scalegrid. io'},{ पोर्ट:6379, होस्ट:'SG-example-2.servers.scalegrid.io'},{ पोर्ट:6379, होस्ट:'SG-example-3.servers.scalegrid.io'},{ पोर्ट :6379, होस्ट:'SG-example-4.servers.scalegrid.io'},{ पोर्ट:6379, होस्ट:'SG-example-5.servers.scalegrid.io'},{ पोर्ट:6379, होस्ट:' SG-example-6.servers.scalegrid.io'}], { redisOptions:{ पासवर्ड:'' }});const rl =readline.createInterface({ input:process.stdin, output:process.stdout, संकेत:'कुंजी दर्ज करें> '}); कंसोल.लॉग ('रेडिस क्लस्टर रीडर में आपका स्वागत है। वह कुंजी दर्ज करें जिसे आप पढ़ना चाहते हैं [Ctrl D से बाहर निकलें]'); rl.prompt (); rl.on (') लाइन', (लाइन) => {अगर (लाइन। ट्रिम ()) {क्लस्टर.गेट (लाइन, फंक्शन (इरेट, रिजल्ट) {अगर (गलती) {कंसोल। एरर (इरेट); } और { कंसोल। लॉग ( "मान:" + परिणाम); } आरएल.प्रॉम्प्ट (); }); } और { कंसोल.एरर ("कोई इनपुट प्राप्त नहीं हुआ"); आरएल.प्रॉम्प्ट (); }}).पर ('करीब', () => { कंसोल. आप अपने क्लाइंट मशीनों पर Redis ड्राइवरों के नवीनतम संस्करणों को स्थापित करने के बाद इनमें से किसी भी उदाहरण को निष्पादित करने में सक्षम होना चाहिए।
यदि आप Redis™ के लिए होस्टिंग के लिए अपने Redis परिनियोजन को स्केलग्रिड के पूरी तरह से प्रबंधित प्लेटफ़ॉर्म पर माइग्रेट करने के लिए तैयार हैं, तो स्केलग्रिड कंसोल पर उपलब्ध अद्भुत सुविधाओं की जाँच करें नि:शुल्क 30-दिवसीय परीक्षण के माध्यम से। Redis™ योजनाओं के लिए हमारी AWS होस्टिंग दुनिया भर में 14 अलग-अलग डेटा केंद्रों में उपलब्ध है, और हम Redis™ के लिए एकमात्र सेवा हैं जो आपको अपने स्वयं के क्लाउड खाते में अपने परिनियोजन को प्रबंधित करने की अनुमति देती है।