नहीं, रेडिस कैश से कहीं अधिक है।
कैश की तरह, रेडिस कुंजी =मान जोड़े को संग्रहीत करता है। लेकिन कैश के विपरीत, रेडिस आपको मूल्यों पर काम करने देता है। रेडिस में 5 डेटा प्रकार हैं - स्ट्रिंग्स, सेट, हैश, लिस्ट और सॉर्ट किए गए सेट। प्रत्येक डेटा प्रकार विभिन्न कार्यों को उजागर करता है।
Redis को समझने का सबसे अच्छा तरीका यह है कि आप किसी एप्लिकेशन को बिना यह सोचे कि आप इसे डेटाबेस में कैसे स्टोर करने जा रहे हैं।
मान लें कि हम StackOverflow.com बनाना चाहते हैं। इसे सरल रखने के लिए, हमें प्रश्न, उत्तर, टैग और उपयोगकर्ता चाहिए।
मॉडलिंग प्रश्न, उपयोगकर्ता और उत्तर
प्रत्येक वस्तु को मानचित्र के रूप में प्रतिरूपित किया जा सकता है। उदाहरण के लिए, प्रश्न एक नक्शा है जिसमें फ़ील्ड {id, title, date_asked,votes, ask_by, status} है। इसी तरह, उत्तर एक नक्शा होता है जिसमें फ़ील्ड {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 या Java प्रोग्राम लिख रहे थे, तो आप प्रश्नों को एक सूची में संग्रहित करेंगे। पता चला, यह रेडिस में भी इसे स्टोर करने का सबसे अच्छा तरीका है।
हर बार जब कोई प्रश्न पूछता है, तो हम सूची में उसकी आईडी जोड़ देते हैं।
$ lpush questions question:1
(integer) 1
$ lpush questions question:2
(integer) 1
अब, जब आप अपना होमपेज रेंडर करना चाहते हैं, तो आप रेडिस से सबसे हाल के 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 'सॉर्टेड सेट फीचर का उपयोग करते हैं। एक क्रमबद्ध सेट आपको प्रत्येक तत्व के साथ एक स्कोर जोड़ने की अनुमति देता है। फिर आप तत्वों को उनके स्कोर के आधार पर पुनः प्राप्त कर सकते हैं।
चलिए आगे बढ़ते हैं और इसे 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