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