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