रेडिस के साथ एक एप्लिकेशन विकसित करना बहुत मजेदार है, लेकिन किसी भी तकनीक के साथ, कुछ बिंदु हैं जिन्हें आपको रेडिस-आधारित या रेडिस नेमस्पेस एप्लिकेशन को डिजाइन करते समय ध्यान में रखना चाहिए। आप शायद पहले से ही रिलेशनल डेटाबेस डेवलपमेंट से परिचित हैं, लेकिन जब कई समान अभ्यास लागू होते हैं, तो ध्यान रखें कि रेडिस एक इन-मेमोरी डेटाबेस है और यह (ज्यादातर) सिंगल-थ्रेडेड है। रेडिस कुंजी के सर्वोत्तम अभ्यासों को एक्सप्लोर करने के लिए आगे पढ़ें।
इसलिए, रेडिस का उपयोग करते समय आपको कई विशिष्टताओं पर ध्यान देना चाहिए:
1. Redis नेमस्पेस के साथ अपनी चाबियों का ट्रैक रखें
डेटाबेस डेटा संग्रहीत करते हैं, लेकिन कोई भी डेवलपर आपके द्वारा Redis में डाले गए कुछ डेटा का ट्रैक खो सकता है। यह केवल स्वाभाविक है, क्योंकि आपके एप्लिकेशन की आवश्यकताएं बदल रही हैं या आप डेटा स्टोर करने के तरीके को बदल रहे हैं। शायद आपने कुछ कुंजियों को समाप्त करने की उपेक्षा की है, या हो सकता है कि एप्लिकेशन का एक मॉड्यूल सेवानिवृत्त हो गया हो।
जो भी हो, संभावना है कि आपके Redis डेटाबेस के कुछ डेटा अब उपयोग नहीं किए जा रहे हैं और बिना किसी उद्देश्य के जगह ले रहे हैं। जब तक आप अपनी चाबियों के लिए ठोस नामकरण का उपयोग नहीं करते हैं, तब तक रेडिस की स्कीमा-रहित प्रकृति आपके डेटासेट की सामग्री को समझना बेहद मुश्किल बना देती है। अपनी कुंजियों के लिए Redis नाम स्थान के साथ उचित नामकरण पद्धति का उपयोग करना आपके डेटाबेस की हाउसकीपिंग को बहुत आसान बना सकता है। जब आप एप्लिकेशन या सेवा द्वारा अपनी कुंजियों को नेमस्पेस करते हैं - सम्मेलन कुंजी के नाम के कुछ हिस्सों को परिसीमित करने के लिए कोलन (':') वर्ण का उपयोग करना है -ए रेडिस नेमस्पेस सर्वोत्तम अभ्यास। इस तरह, आप डेटा माइग्रेशन, रूपांतरण, विलोपन या स्थानांतरण के दौरान उन्हें आसानी से पहचान सकेंगे। रेडिस नेमस्पेस और रेडिस नेमस्पेस कुंजियाँ इस पहचान में मदद करती हैं।
रेडिस नेमस्पेस से परे, रेडिस के लिए एक और सामान्य उपयोग का मामला "हॉट" डेटा आइटम के लिए द्वितीयक डेटा स्टोर के रूप में है, जबकि अधिकांश डेटा किसी अन्य डेटाबेस (जैसे पोस्टग्रेएसक्यूएल, मोंगोडीबी) में रखा जाता है। ऐसे मामलों में, डेवलपर्स अक्सर प्राथमिक डेटा स्टोर से स्थानांतरित होने पर रेडिस से डेटा निकालना भूल जाते हैं। इस प्रकार की क्रॉस-डेटास्टोर निर्भरता के लिए एक कैस्केडिंग डिलीट की आवश्यकता होती है, जिसे रेडिस सेट में दिए गए डेटा आइटम के लिए सभी पहचानकर्ताओं को रखकर कार्यान्वित किया जा सकता है। यह सुनिश्चित करता है कि प्राथमिक डेटा स्टोर से हटाए जाने के बाद लागू की गई सफाई प्रक्रिया को केवल उस सेट की सामग्री के माध्यम से पुनरावृत्त करने की आवश्यकता होती है ताकि सभी प्रासंगिक प्रतियों और संबंधित टिडबिट्स (पूरा होने पर सेट सहित) को हटा दिया जा सके।
2. अपने प्रमुख नामों की लंबाई पर नज़र रखें
यह रेडिस नेमस्पेस के संबंध में उपरोक्त के विपरीत प्रतीत हो सकता है, लेकिन चूंकि मुख्य नाम भी स्मृति लेते हैं, इसलिए आपको उन्हें छोटा रखने का प्रयास करना चाहिए। जाहिर है, यह लाखों या अरबों चाबियों वाले डेटासेट के साथ एक मुद्दा बन जाता है, लेकिन तथ्य यह है कि लंबी चाबियों की कीमत किसी भी हैशटेबल के साथ होती है।
उदाहरण के लिए:मान लें कि 1,000,000 कुंजियों को Redis नामस्थान के साथ संग्रहीत करना, 32-वर्ण मान के साथ प्रत्येक सेट, 6-वर्ण कुंजी नामों का उपयोग करते समय लगभग 96MB और 12-वर्ण नामों के साथ 111MB (32-बिट Redis सर्वर पर) का उपभोग करेगा। आपकी चाबियों की संख्या बढ़ने पर 15% से अधिक का यह ओवरहेड काफी महत्वपूर्ण हो जाता है। रेडिस के साथ उपसर्गों के साथ कुंजियों को हटाना भी एक संभावना है।
3. सही डेटा संरचनाओं का उपयोग करें
या तो स्मृति उपयोग या प्रदर्शन के कारण, कभी-कभी एक डेटा संरचना दूसरे की तुलना में आपके डेटा सेट के लिए बेहतर फिट होती है। ध्यान में रखने के लिए यहां कुछ सर्वोत्तम अभ्यास दिए गए हैं:
-
अपने डेटा को हजारों (या लाखों) स्वतंत्र स्ट्रिंग मानों में संग्रहीत करने के बजाय, संबंधित डेटा को हैश डेटा संरचना के साथ समूहीकृत करने पर विचार करें। हैश बहुत कुशल हैं और आपके मेमोरी उपयोग को कम कर सकते हैं (साथ ही वे कुछ विवरणों को सारणित करने और आपके कोड को और अधिक पठनीय बनाने के अतिरिक्त मूल्य प्रदान करते हैं)। इस बारे में अधिक जानकारी के लिए, इस लेख को देखें।
-
जब लागू हो, सेट के बजाय सूचियों का उपयोग करें। यदि आपको विशिष्टता सुनिश्चित करने या सदस्यता की जाँच करने के लिए सेट के गुणों की आवश्यकता नहीं है, तो एक सूची कम मेमोरी की खपत करेगी और तेजी से सम्मिलन करेगी।
-
सॉर्टेड सेट सबसे महंगी डेटा संरचना है, दोनों मेमोरी खपत और बुनियादी संचालन जटिलता (जैसे एक नए सदस्य को ZADDing) के मामले में। यदि आपको केवल स्कोर देखने के तरीके की आवश्यकता है और ऑर्डर महत्वपूर्ण नहीं है, तो इसके बजाय हैश का उपयोग करने पर विचार करें।
-
Redis में अक्सर अनदेखी की जाने वाली विशेषता बिटमैप या बिटसेट (v2.2 के बाद से उपलब्ध) है। बिटसेट आपको रेडिस मूल्यों पर कई बिट-स्तरीय संचालन करने की अनुमति देता है, जिसका अर्थ बड़ी मात्रा में डेटा को कुशलता से संग्रहीत करना हो सकता है। इसका उपयोग, उदाहरण के लिए, कुछ हल्के विश्लेषणों के लिए किया जा सकता है।
4. स्कैन का उपयोग करें, कभी भी कुंजियों का उपयोग न करें
SCAN कमांड Redis v2.8 से शुरू होकर उपलब्ध है और आपको कर्सर का उपयोग करके कीस्पेस में कुंजियों को पुनः प्राप्त करने में सक्षम बनाता है। यह व्यवहार (हिस) KEYS कमांड के विपरीत है, जो सभी मिलान तत्वों को एक साथ लौटाता है, लेकिन उत्पादन में जोखिम भरा माना जाता है क्योंकि यह आपके रेडिस सर्वर को अवरुद्ध कर सकता है और यहां तक कि इसके रैम संसाधनों को समाप्त कर सकता है। दूसरी ओर, स्कैन आपके सर्वर को अवरुद्ध करने या किसी दास पर भरोसा करने के जोखिम के बिना डेटा का निरीक्षण करना संभव बनाता है।
ध्यान दें कि स्कैन के लिए आपको एक कर्सर मान पढ़ने की आवश्यकता होती है जो स्कैन को बाद में कॉल करने के लिए दिया जाता है। स्कैन एक कीनाम पैटर्न और एक वैकल्पिक गिनती तर्क को भी स्वीकार करता है। स्कैन और कुंजी के बीच एक और अंतर यह है कि स्कैन के साथ एक ही कुंजी नाम को एक से अधिक बार प्राप्त करना संभव है।
स्कैन के साथ एसएससीएएन, एचएससीएएन, और जेडएससीएएन हैं, जो आपको सेट, हैश और सॉर्ट किए गए सेट (क्रमशः) की सामग्री को पुनरावृत्त करने की अनुमति देते हैं।
5. सर्वर-साइड लुआ स्क्रिप्ट का उपयोग करें
एक बार जब आप लुआ स्क्रिप्ट चलाने के लिए रेडिस की क्षमता को अपना लेते हैं, तो एक डेवलपर के रूप में, आप परिचित जमीन पर नेविगेट करेंगे। लेने के लिए सबसे आसान भाषाओं में से एक, लुआ आपको रेडिस सर्वर के अंदर चलने वाले कोड के साथ अपनी रचनात्मकता को व्यक्त करने की क्षमता प्रदान करता है। जब सही तरीके से लागू किया जाता है, तो लुआ स्क्रिप्ट प्रदर्शन और संसाधन खपत के मामले में अंतर की दुनिया बना सकती है। (एप्लिकेशन के) सीपीयू में डेटा लाने के बजाय, स्क्रिप्ट आपको डेटा के पास तर्क निष्पादित करने की अनुमति देती है, जो नेटवर्क विलंबता और डेटा के अनावश्यक संचरण को कम करता है।
लुआ के नाटकीय प्रभाव का एक उत्कृष्ट उदाहरण तब होता है जब आप केवल अपने आवेदन में इसे फ़िल्टर या एकत्र करने के लिए रेडिस से बहुत अधिक डेटा प्राप्त कर रहे हैं। एक स्क्रिप्ट में प्रोसेसिंग वर्कफ़्लो को इनकैप्सुलेट करके, आपको केवल समय और संसाधनों के एक अंश पर महत्वपूर्ण रूप से छोटे उत्तर प्राप्त करने के लिए इसे लागू करने की आवश्यकता है।
प्रो टिप: लुआ बहुत अच्छा है, लेकिन एक बार जब आप वर्कफ़्लो को इसमें ले जाते हैं तो आप पाएंगे कि त्रुटि रिपोर्टिंग और हैंडलिंग कठिन है (आखिरकार, आप रेडिस सर्वर के अंदर चल रहे हैं)। इसके चारों ओर एक चतुर तरीका रेडिस के पब/सब का उपयोग कर रहा है और आपकी स्क्रिप्ट एक समर्पित चैनल पर अपने "लॉग" संदेश प्रकाशित कर रही है। फिर, इन संदेशों को प्राप्त करने और तदनुसार उन्हें संभालने के लिए एक ग्राहक प्रक्रिया स्थापित करें।
आपके रेडिस के पलायन के दौरान संभवत:कई अन्य महत्वपूर्ण सुझाव दिए गए हैं, लेकिन यह सूची आपको कुछ सबसे महत्वपूर्ण सुझावों के साथ आरंभ करने में मदद करेगी। यदि आपके पास अन्य सुझाव हैं जो आप साझा करना चाहते हैं, प्रतिक्रिया या प्रश्न - कृपया बेझिझक मुझ पर चिल्लाएं, मैं अत्यधिक उपलब्ध हूं 🙂