Redis और Spring के लिए ऑब्जेक्ट मैपिंग, और अधिक
Redis OM Spring एक नई क्लाइंट लाइब्रेरी है जिसे आपके Spring एप्लिकेशन में अपने डोमेन को मॉडल करने और डेटा को Redis में बनाए रखने में मदद करने के लिए डिज़ाइन किया गया है। लाइब्रेरी ओपन सोर्स Redis के साथ काम करती है लेकिन RedisJSON के साथ उपयोग किए जाने पर कई अतिरिक्त इंडेक्सिंग और क्वेरीइंग क्षमताएं प्रदान करती है।
Redis, अपने मॉड्यूल के साथ मिलकर, ग्रह पर सबसे तेज़ डेटा प्लेटफॉर्म में से एक बनाता है। लेकिन इसकी गति का लाभ उठाना हमेशा आसान नहीं रहा है। Redis OM Spring एक आकर्षक डेवलपर अनुभव प्रदान करता है, और इस पोस्ट में मैं आपको दिखाने जा रहा हूं कि आप इसके साथ क्या बना सकते हैं।
प्रेरणा
एक डेवलपर के रूप में ऐसी तकनीक पर ठोकर खाना दुर्लभ है जो शक्तिशाली और सरल दोनों हो। OSS Redis अकेले के साथ, आपके पास एंटरप्राइज़ एप्लिकेशन द्वारा आवश्यक कई डेटा-उन्मुख और मैसेजिंग कार्यों को करने के लिए डेटा संरचनाओं और संबंधित कमांड का एक मेजबान है।
इसी तरह, एंटरप्राइज़ Java डेवलपमेंट की दुनिया में, Spring ने पिछले 18 वर्षों में बड़ी, सुविधा-संपन्न एप्लिकेशन बनाने की जटिलता को वश में किया है। इस क्षेत्र में, Redis को अद्भुत Spring Data Redis द्वारा समर्थित किया गया है, जो OSS Redis के साथ बातचीत के लिए निम्न-स्तरीय और उच्च-स्तरीय दोनों अमूर्तताएं प्रदान करता है।
Spring Data Redis का उपयोग करने में चुनौतियों में से एक यह है कि यह Redis मॉड्यूल का समर्थन नहीं करता है। यहां Redis में, हम कई गेम-चेंजिंग Redis मॉड्यूल विकसित करते हैं जो खोज, JSON इंडेक्सिंग और क्वेरीइंग, ग्राफ डेटा, समय श्रृंखला डेटा, और सर्वर-साइड कंप्यूटेशन (Redis Gears) के लिए एक पूर्ण फ्रेमवर्क के साथ Redis कोर डेटा संरचनाओं को समृद्ध करते हैं। हमने इन मॉड्यूल का लाभ उठाने और क्षमताओं का एक व्यापक सेट प्रदान करने के लिए Redis OM Spring बनाया।
Redis OM Spring
Redis OM क्लाइंट लाइब्रेरी का परिवार आपकी पसंद की भाषा/प्लेटफॉर्म के लिए मुहावरेदार तरीके से लागू उच्च-स्तरीय अमूर्तताएं प्रदान करने का लक्ष्य रखता है। हम वर्तमान में Node.js, Python, .NET, और Spring समुदायों को पूरा करते हैं। Redis OM Spring डेवलपर्स को अपने Spring Boot एप्लिकेशन में Redis की शक्ति को आसानी से जोड़ने देता है।
विशेष रूप से, Redis OM Spring अद्भुत Spring Data Redis (SDR) फ्रेमवर्क पर निर्मित एक मजबूत रिपॉजिटरी और कस्टम ऑब्जेक्ट-मैपिंग अमूर्तताएं प्रदान करता है।
वर्तमान पूर्वावलोकन रिलीज Spring Data Redis की सभी क्षमताएं प्रदान करता है, साथ ही:
- Java से JSON मैपिंग
- उन्नत Hash मैपिंग
- स्वचालित खोज इंडेक्स निर्माण
- RediSearch द्वारा समर्थित Spring Data रिपॉजिटरी
Java से JSON मैपिंग
RedisJSON का उपयोग करके Redis में संग्रहीत JSON दस्तावेजों में Java ऑब्जेक्ट्स को मैप करने के लिए, आप
@Documentएनोटेशन का उपयोग कर सकते हैं। किसी अन्य Spring Data एंटिटी मैपिंग एनोटेशन की तरह, आप इसे क्लास घोषणा में जोड़ते हैं। उदाहरण के लिए, कल्पना करें कि आप
Companyप्रकार की वस्तुओं को मैप करना चाहते हैं। बस नीचे दिखाए अनुसार
@Documentजोड़ें:
आप देख सकते हैं कि इस क्लास के शरीर में कई एनोटेशन हैं।
@IdSpring Data से आता है, और यह
idसंपत्ति को Redis कुंजी के रूप में घोषित करता है जो हमारे JSON दस्तावेज़ को स्टोर करेगा।
शायद Spring Data लाइब्रेरी परिवार की सबसे लोकप्रिय विशेषता घोषणात्मक डेटा रिपॉजिटरी है। अगले दो एनोटेशन आपको JSON दस्तावेजों को इंडेक्स करने के लिए RediSearch का उपयोग करने देते हैं। यह
RedisDocumentRepositoryइंटरफेस के माध्यम से उजागर किया गया है:
खाली रिपॉजिटरी घोषणा आपके POJOs के लिए बुनियादी CRUD कार्यक्षमता/पेजिनेशन और सॉर्टिंग प्राप्त करने के लिए आवश्यक है।
Redis OM Spring POJO फ़ील्ड का उपयोग करता है जिन्हें
@Indexedया
@Searchableके साथ एनोटेट किया गया है इंडेक्स स्कीमा बनाने के लिए।
CompanyPOJO के मामले में, हमारे पास एक नाम संपत्ति है जिसे "खोजने योग्य" के रूप में एनोटेट किया गया है, जिसका अर्थ है कि हमें उस फ़ील्ड पर पूर्ण-पाठ खोज क्षमताएं मिलती हैं। यह स्कीमा फ़ील्ड परिभाषा
$.name AS name TEXTमें परिलक्षित होता है।
दूसरी ओर, फ़ील्ड टैग को "इंडेक्सेबल" के रूप में एनोटेट किया गया है, जिसका अर्थ है कि हमें TAG प्रकार का एक इंडेक्स फ़ील्ड मिलता है, जिसका अर्थ है कि हम फ़ील्ड के सटीक मान द्वारा कंपनियों की खोज कर सकते हैं। यह फिर से स्कीमा फ़ील्ड परिभाषा में परिलक्षित होता है:
$.tags[*] AS tags TAG
सरल डायनामिक क्वेरी बनाएं
शायद Redis OM Spring की सबसे सम्मोहक विशेषता रनटाइम पर रिपॉजिटरी इंटरफेस से स्वचालित रूप से रिपॉजिटरी कार्यान्वयन बनाने की क्षमता है। उचित फ़ील्ड इंडेक्स होने के साथ, अब आप नीचे दिए गए सभी क्वेरी को बिना कोई अतिरिक्त कोड लिखे पूरा कर सकते हैं:
रिपॉजिटरी प्रॉक्सी के पास स्टोर-विशिष्ट क्वेरी को विधि नाम से प्राप्त करने के दो तरीके हैं:
- विधि नाम से सीधे क्वेरी प्राप्त करके।
@Query
या@Aggregation
एनोटेशन का उपयोग करके मैन्युअल रूप से परिभाषित क्वेरी का उपयोग करके।
आइए रिपॉजिटरी इंटरफेस में जोड़े गए कुछ विधि घोषणाओं की जांच करें।
findOneByName
Redis OM Spring उपयुक्त क्वेरी उत्पन्न करने के लिए विधि नाम और पैरामीटर का उपयोग करता है। यह परिणाम को पैकेज और वापस करने का तरीका निर्धारित करने के लिए विधि रिटर्न प्रकार का उपयोग करता है।
findOneByNameएक
Optional of Companyलौटाता है।
findOneका अर्थ यह भी है कि केवल एक परिणाम वापस किया जाएगा, भले ही कई परिणाम हों। लाइब्रेरी अपेक्षित पैरामीटर की संख्या निर्धारित करने के लिए विधि नाम को पार्स करती है। उदाहरण के लिए, विधि के
ByNameभाग से हमें पता चलता है कि हमें
nameनामक एक पैरामीटर की अपेक्षा है।
findByLocationNear
Redis OM Spring जियोस्पेशियल डेटा स्टोर करने के लिए GeoJSON प्रकारों का समर्थन करता है। हमारी क्वेरी में
nearकीवर्ड का उपयोग करके, हम अपने कोड को
Point
(org.springframework.data.geo.Point)और
Distance (org.springframework.data.geo.Distance)प्रकार के पैरामीटर की अपेक्षा करने के लिए कह रहे हैं।
रिपॉजिटरी का उपयोग करना
अन्य Spring Data रिपॉजिटरी के साथ, आप एक रिपॉजिटरी को किसी अन्य Spring घटक में इंजेक्ट कर सकते हैं:
समापन
यह Redis OM Spring का सिर्फ एक पूर्वावलोकन रिलीज है। अभी भी बहुत कुछ बनाना बाकी है, लेकिन अभी हमें आपकी मदद की ज़रूरत है! आप अपने Spring एप्लिकेशन में प्रोजेक्ट इंस्टॉल करने के तरीके के विवरण के लिए README देख सकते हैं। हम आपकी प्रतिक्रिया, PRs, और इश्यू का स्वागत करते हैं!