नहीं, Redis एक कैश से बहुत अधिक है।
कैश की तरह, रेडिस कुंजी = मूल्य जोड़े को संग्रहीत करता है। लेकिन कैश के विपरीत, रेडिस आपको मूल्यों पर काम करने देता है। रेडिस में 5 डेटा प्रकार हैं - स्ट्रिंग्स, सेट्स, हैश, लिस्ट्स और सॉर्ट किए गए सेट्स। प्रत्येक डेटा प्रकार विभिन्न कार्यों को उजागर करता है।
रेडिस को समझने का सबसे अच्छा तरीका यह है कि आप एक डेटाबेस में इसे कैसे स्टोर करने जा रहे हैं, इस बारे में सोचे बिना एक एप्लिकेशन को मॉडल करें।
कहते हैं कि हम StackOverflow.com का निर्माण करना चाहते हैं। इसे सरल रखने के लिए, हमें प्रश्न, उत्तर, टैग और उपयोगकर्ता चाहिए।
मॉडलिंग प्रश्न, उपयोगकर्ता और उत्तर
प्रत्येक वस्तु को मानचित्र के रूप में तैयार किया जा सकता है। उदाहरण के लिए, एक प्रश्न फ़ील्ड के साथ एक मानचित्र है {आईडी, शीर्षक, दिनांक_आकाश, वोट, ask_by, स्थिति}। इसी तरह, उत्तर फ़ील्ड {id, question_id, answer_text, answer_by, वोट, स्थिति} के साथ एक नक्शा है। इसी तरह, हम किसी उपयोगकर्ता ऑब्जेक्ट को मॉडल कर सकते हैं।
इनमें से प्रत्येक वस्तु को रेडिस में सीधे हैश के रूप में संग्रहीत किया जा सकता है। अद्वितीय आईडी बनाने के लिए, आप परमाणु वेतन वृद्धि कमांड का उपयोग कर सकते हैं। कुछ इस तरह -
$ HINCRBY unique_ids question 1
(integer) 1
$ HMSET question:1 title "Is Redis just a cache?" asked_by 12 votes 0
OK
$ HINCRBY unique_ids answer 1
(integer) 1
$ HMSET answer:1 question_id 1 answer_text "No, its a lot more" answered_by 15 votes 1
OK
मतों को संभालना
अब, हर बार किसी ने एक सवाल या एक उत्तर दिया है, आपको बस यह करने की आवश्यकता है
$ HINCRBY question:1 votes 1
(integer) 1
$ HINCRBY question:1 votes 1
(integer) 2
मुखपृष्ठ के लिए प्रश्नों की सूची
अगला, हम होम पेज पर प्रदर्शित करने के लिए सबसे हाल के प्रश्नों को संग्रहीत करना चाहते हैं। यदि आप .NET या जावा प्रोग्राम लिख रहे थे, तो आप प्रश्नों को एक सूची में संग्रहीत करेंगे। यह रेडिस में भी स्टोर करने का सबसे अच्छा तरीका है।
जब भी कोई प्रश्न पूछता है, हम सूची में उसकी आईडी जोड़ देते हैं।
$ lpush questions question:1
(integer) 1
$ lpush questions question:2
(integer) 1
अब, जब आप अपने मुखपृष्ठ को प्रस्तुत करना चाहते हैं, तो आप Redis से सबसे हाल के 25 प्रश्न पूछते हैं।
$ lrange questions 0 24
1) "question:100"
2) "question:99"
3) "question:98"
4) "question:97"
5) "question:96"
...
25) "question:76"
अब जब आपके पास आईडी है, तो पिपलीनिंग का उपयोग करके रेडिस से आइटम पुनर्प्राप्त करें और उन्हें उपयोगकर्ता को दिखाएं।
वोट द्वारा छाँटे गए टैग द्वारा प्रश्न
अगला, हम प्रत्येक टैग के लिए प्रश्न पुनः प्राप्त करना चाहते हैं। लेकिन SO आपको प्रत्येक टैग के तहत शीर्ष मतदान वाले प्रश्न, नए प्रश्न या अनुत्तरित प्रश्न देखने की अनुमति देता है।
इसे मॉडल करने के लिए, हम Redis 'सॉर्टेड सेट फीचर का उपयोग करते हैं। एक सॉर्ट किया गया सेट आपको प्रत्येक तत्व के साथ एक स्कोर संबद्ध करने की अनुमति देता है। फिर आप उनके स्कोर के आधार पर तत्वों को पुनः प्राप्त कर सकते हैं।
रेडिस टैग के लिए आगे बढ़ें और ऐसा करें
$ zadd questions_by_votes_tagged:redis 2 question:1
(integer) 1
$ zadd questions_by_votes_tagged:redis 10 question:2
(integer) 1
$ zadd questions_by_votes_tagged:redis 5 question:613
(integer) 1
$ zrange questions_by_votes_tagged:redis 0 5
1) "question:1"
2) "question:613"
3) "question:2"
$ zrevrange questions_by_votes_tagged:redis 0 5
1) "question:2"
2) "question:613"
3) "question:1"
हमने यहाँ पर क्या किया? हमने एक हल किए गए सेट में प्रश्नों को जोड़ा, और प्रत्येक प्रश्न के लिए एक अंक (वोटों की संख्या) को जोड़ा। जब भी कोई सवाल उठता है, हम उसका स्कोर बढ़ा देंगे। और जब एक उपयोगकर्ता "वोटों द्वारा छांटे गए रेडिस को टैग करता है" पर क्लिक करता है, तो हम सिर्फ एक करते हैं zrevrange
और शीर्ष प्रश्नों को वापस लेते हैं।
रिफ्रेशिंग पेज के बिना रियलटाइम सवाल
और अंत में, एक बोनस सुविधा। यदि आप प्रश्न पृष्ठ को खुला रखते हैं, तो एक नया प्रश्न जोड़े जाने पर SO आपको सूचित करेगा। यहां पर रेडिस कैसे मदद कर सकती है?
रेडिस के पास पब-उप मॉडल है। आप चैनल बना सकते हैं, उदाहरण के लिए "Channel_questions_tagged_redis"। आप तब subscribe
किसी विशेष चैनल के उपयोगकर्ताओं को। जब एक नया प्रश्न जोड़ा जाता है, तो आप publish
उस चैनल को एक संदेश देंगे । सभी उपयोगकर्ताओं को तब संदेश मिलेगा। आपको वास्तव में ब्राउज़र को संदेश देने के लिए वेब सॉकेट या धूमकेतु जैसी वेब तकनीक का उपयोग करना होगा, लेकिन रेडिस आपको सर्वर साइड पर सभी पाइपलाइन के साथ मदद करता है।
दृढ़ता, विश्वसनीयता आदि।
कैश के विपरीत, रेडिस हार्ड डिस्क पर डेटा को बनाए रखता है। बेहतर विश्वसनीयता प्रदान करने के लिए आपके पास मास्टर-स्लेव सेटअप हो सकता है। अधिक जानने के लिए, यहाँ पर दृढ़ता और प्रतिकृति विषयों पर जाएँ - http://redis.io/documentation