नया संस्करण Redis की कुछ सुविधाओं में एक विकासवादी कदम है, नई सुविधाएं जोड़ता है, और बेहतर संसाधन उपयोग के साथ अधिक कच्ची शक्ति प्रदान करता है।
आज, हमें Redis v7 के पहले रिलीज कैंडिडेट (RC1) की उपलब्धता की घोषणा करते हुए गर्व हो रहा है। संस्करण 7.0 परियोजना के लिए एक महत्वपूर्ण मील का पत्थर है जो पिछले साल के बेहतर हिस्से में विकासाधीन रहा है। यह प्रमुख रिलीज कार्यक्षमता और आंतरिक संरचना के मामले में अधिक मूलभूत परिवर्तन करने का अवसर है। हम अपने सामान्य रिलीज चक्र का पालन करने की उम्मीद करते हैं, इसलिए Redis 7.0 की सामान्य उपलब्धता से पहले लगभग तीन सप्ताह के अंतराल पर दो और कैंडिडेट्स की योजना है।
Redis 7.0 कई नई सुविधाएं जोड़ता है, जैसे Functions, ACL v2, शार्डेड Pub/Sub, और बहुत कुछ। हम इनको इस और बाद की पोस्ट की श्रृंखला में कवर करेंगे। इसके अलावा, इस संस्करण में किए गए बहुत से कार्य Redis के उन हिस्सों को सुधारने और अनुकूलित करने पर केंद्रित थे जो अधिकांश उपयोगकर्ताओं के लिए कम दृश्यमान हैं। यह प्रयास व्यावहारिक रूप से हर Redis सबसिस्टम तक फैला हुआ था, जिसमें पर्सिस्टेंस, रेप्लिकेशन, नेटवर्क, मेमोरी और कंप्यूट उपयोग शामिल हैं। परिणाम पहले से कहीं अधिक तेज, अधिक स्थिर और अधिक किफायती Redis है।
नया Redis संस्करण नई डेटा संरचनाओं की घोषणा नहीं करता या इसके परिचालन पहलुओं को नए क्षेत्रों में नहीं ले जाता। इसके बजाय, यह परियोजना पर एक आत्मनिरीक्षण नज़र डालने, मौजूदा डिज़ाइन मान्यताओं को चुनौती देने, बुनियादी ढांचे में सुधार की दिशा में साहसिक कदम उठाने, और समुदाय की जरूरतों और उपयोग के मामलों को आंतरिक बनाने के बारे में अधिक है।
Redis Functions उपरोक्त का एक उदाहरण है। Functions, Redis प्रोग्रामेबिलिटी के व्यापक विषय से संबंधित हैं, जिसका अर्थ है Redis को प्रोग्राम करने की क्षमता। "Redis को प्रोग्राम करना" का अर्थ है सर्वर को उपयोगकर्ता तर्क निष्पादित करना, मुख्य रूप से डेटा स्थानीयता के लिए। प्रोग्रामेबिलिटी संस्करण 2.6 में Lua स्क्रिप्ट की शुरूआत के बाद से Redis का हिस्सा रही है (अधिक विवरण के लिए Eval Scripts का परिचय देखें)।
Redis उपयोगकर्ताओं द्वारा Lua स्क्रिप्ट को अपनाना तब से बढ़ रहा है। स्क्रिप्ट्स कोर Redis ऑपरेशंस और कंट्रोल स्ट्रक्चर से सर्वर-साइड वर्कफ़्लो को लिखने का एक प्रभावी और सरल तरीका प्रदान करती हैं। वे एप्लिकेशन के नेटिव कोड से अंतर्निहित डेटा संरचनाओं के अमूर्तीकरण के रूप में काम कर सकते हैं। एप्लिकेशन के Lua स्क्रिप्ट्स का सेट इसके तार्किक संचालन को लागू करता है (उदाहरण के लिए, "यूज़र जोड़ें" या "ऑर्डर दें" स्क्रिप्ट)।
चूंकि स्क्रिप्टिंग एक लोकप्रिय Redis सुविधा है जो लंबे समय से मौजूद है, हमने इसके बारे में बहुत सारी प्रतिक्रिया एकत्र की है। हमने पाया कि अधिकांश आवश्यकताएं तीन बकेट में आती हैं:
- स्वतंत्रता: स्क्रिप्ट्स एप्लिकेशन का हिस्सा हैं। वे इसके आंतरिक भाग को दर्शाते हैं, इसलिए वे कार्यान्वयन से मजबूती से जुड़े हुए हैं। एप्लिकेशन को स्क्रिप्ट्स का सोर्स कोड एम्बेड करना होता है और उन्हें रनटाइम पर लोड करना होता है। यह उलझाव एप्लिकेशन के जीवनचक्र के हर चरण में जटिलता बढ़ाता है, विकास से लेकर टेस्टिंग और डिप्लॉयमेंट तक।
- एक्सीक्यूशन इंजन: Redis में स्क्रिप्ट लिखने के लिए केवल एक भाषा है: Lua। इसके अलावा, असंख्य तकनीकी कारणों से, Redis इस पूरे समय Lua 5.1 का ही उपयोग कर रहा है। कई लोग नए संस्करण चाहेंगे। अधिकांश पूरी तरह से अलग भाषा चाहते हैं।
- मजबूती: Redis में Lua स्क्रिप्टिंग का डिज़ाइन और कार्यान्वयन, किसी भी अन्य सॉफ्टवेयर की तरह, मान्यताएं बनाता है और इसकी सीमाएं हैं। कुछ मामलों में, यह तंत्र को विस्तारित करना बेहद जटिल, यदि असंभव नहीं तो, बना देता है। फाउंडेशन की कमी हमें संभावित मूल्यवान सुविधाओं (जैसे इवेंट प्रोसेसिंग और क्लस्टर स्क्रिप्ट्स) को जोड़ने से रोकती है।
यह हमें वापस Redis Functions पर लाता है। Redis 7.0 में, Functions एप्लिकेशन से पूरी तरह से स्वतंत्र हैं। नतीजतन, Functions निष्पादन योग्य सॉफ्टवेयर आर्टिफैक्ट्स हैं जो फर्स्ट-क्लास डेटाबेस नागरिक हैं। Redis सर्वर Functions को यूज़र डेटा की तरह ही प्रबंधित करता है, इसलिए वे उपलब्धता के लिए पर्सिस्ट और रेप्लिकेट होते हैं। Functions को डेटाबेस में लोड करना अब रनटाइम के दौरान एप्लिकेशन की जिम्मेदारी नहीं है और एक प्रशासनिक रखरखाव कार्य बन जाता है जिसे शेड्यूल और प्रबंधित किया जा सकता है।
Functions का सर्वर के संदर्भ में निवास एप्लिकेशन को Functions के कार्यान्वयन से मुक्त करता है। इसके बजाय, एप्लिकेशन अपने एपीआई के रूप में फंक्शन सिग्नेचर पर निर्भर करता है जो एम्बेडेड तर्क से जुड़ता है और Redis कमांड और प्रकारों से पूरी तरह अनजान रहता है। यह विभिन्न एप्लिकेशन्स को Functions साझा करने की अनुमति देता है। यह एप्लिकेशन पर अनिवार्य निर्भरता के बिना Functions को विकसित, टेस्ट और रखरखाव करने में भी सक्षम बनाता है।
Redis Functions का डिज़ाइन इंजन-अज्ञेयवादी है। हालांकि Redis 7.0 केवल Lua 5.1 में लिखे गए Functions का समर्थन करता है, आंतरिक कार्यान्वयन अन्य एक्सीक्यूशन इंजन के साथ हुक करने के लिए लगभग तैयार है। हम भविष्य में अधिक प्रकार के एक्सीक्यूशन इंजन के लिए समर्थन जोड़ने की योजना बना रहे हैं।
Functions द्वारा किया गया एक और प्रतिमान बदलाव लाइब्रेरी का उपयोग है। लाइब्रेरी में एक या अधिक पंजीकृत Functions और कोई अतिरिक्त आंतरिक Functions हो सकते हैं। पंजीकृत Functions लाइब्रेरी के एंट्री पॉइंट और एप्लिकेशन के संविदात्मक API हैं। दूसरी ओर, आंतरिक Functions को कोड पुन: उपयोग के लिए लाइब्रेरी के अंदर मूल रूप से कॉल किया जा सकता है।
हम उम्मीद करते हैं कि Redis 7.0 में Functions की शुरूआत Redis की प्रोग्रामेबिलिटी को अगले चरण में ले जाने की दिशा में एक बड़ा कदम है। यदि आप पहले से ही अपने एप्लिकेशन में Lua स्क्रिप्ट का उपयोग कर रहे हैं, तो Functions का उपयोग करने के लिए माइग्रेट करना वैकल्पिक और सरल है (अधिक के लिए Redis Functions देखें)। जो और भी बेहतर है, वह यह है कि आगे बढ़ते हुए, Functions Redis प्रोग्रामेबिलिटी के साथ सुधार और नवाचार के लिए एक बेहतर आधार प्रदान करते हैं।