caching - क्या रेडिस सिर्फ एक कैश है?




redis (3)

मैं कुछ रेडिस दस्तावेज़ पढ़ रहा हूं और http://try.redis-db.com/ पर ट्यूटोरियल की कोशिश कर रहा हूं। अब तक, मैं रेडिस और कैशिंग टेक्नोलॉजीज जैसे वेग या एंटरप्राइज़ लाइब्रेरी कैशिंग फ्रेमवर्क के बीच कोई अंतर नहीं देख सकता

आप एक अद्वितीय कुंजी का उपयोग कर इन-मेमोरी डेटा स्टोर में ऑब्जेक्ट्स को प्रभावी ढंग से जोड़ रहे हैं। कोई संबंधपरक अर्थशास्त्र प्रतीत नहीं होता है ...

मैं क्या खो रहा हूँ?


नहीं, रेडिस कैश से कहीं ज्यादा है।

कैश की तरह, रेडिस कुंजी = वैल्यू जोड़े स्टोर करता है। लेकिन एक कैश के विपरीत, रेडिस आपको मूल्यों पर काम करने देता है। रेडिस - स्ट्रिंग्स, सेट्स, हैश, लिस्ट्स और सॉर्टेड सेट्स में 5 डेटा प्रकार हैं। प्रत्येक डेटा प्रकार विभिन्न परिचालनों का खुलासा करता है।

रेडिस को समझने का सबसे अच्छा तरीका यह है कि आप इसे डेटाबेस में स्टोर करने के तरीके के बारे में सोचने के बिना किसी मॉडल को मॉडल करना चाहते हैं।

आइए कहें कि हम .com बनाना चाहते हैं। इसे सरल रखने के लिए, हमें प्रश्न, उत्तर, टैग और उपयोगकर्ता की आवश्यकता है।

मॉडलिंग प्रश्न, उपयोगकर्ता और उत्तर

प्रत्येक वस्तु को मानचित्र के रूप में मॉडलिंग किया जा सकता है। उदाहरण के लिए, एक प्रश्न फ़ील्ड {आईडी, शीर्षक, date_asked, वोट, ask_by, स्थिति} के साथ एक नक्शा है। इसी प्रकार, उत्तर फ़ील्ड {आईडी, 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

अब, जब आप अपना होमपेज प्रस्तुत करना चाहते हैं, तो आप सबसे हाल के 25 प्रश्नों के लिए रेडिस से पूछते हैं।

$ lrange questions 0 24
1) "question:100"
2) "question:99"
3) "question:98"
4) "question:97"
5) "question:96"
...
25) "question:76"

अब जब आपके पास आईडी हैं, तो पाइपलाइनिंग का उपयोग करके रेडिस से आइटम पुनर्प्राप्त करें और उन्हें उपयोगकर्ता को दिखाएं।

टैग्स द्वारा प्रश्न, वोट द्वारा क्रमबद्ध

इसके बाद, हम प्रत्येक टैग के लिए प्रश्न पुनर्प्राप्त करना चाहते हैं। लेकिन एसओ आपको प्रत्येक टैग के तहत शीर्ष वोट किए गए प्रश्न, नए प्रश्न या अनुत्तरित प्रश्न देखने की अनुमति देता है।

इसे मॉडल करने के लिए, हम रेडिस 'सॉर्टेड सेट सुविधा का उपयोग करते हैं। एक सॉर्टेड सेट आपको प्रत्येक तत्व के साथ स्कोर जोड़ने की अनुमति देता है। फिर आप अपने स्कोर के आधार पर तत्वों को पुनर्प्राप्त कर सकते हैं।

आइए आगे बढ़ें और रेडिस टैग के लिए ऐसा करें

$ 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 , वोटों द्वारा क्रमबद्ध प्रश्न" पर क्लिक करता है, तो हम केवल एक zrevrange और शीर्ष प्रश्न वापस प्राप्त करते हैं।

ताज़ा पृष्ठ के बिना रीयलटाइम प्रश्न

और अंत में, एक बोनस सुविधा। यदि आप प्रश्न पृष्ठ खोले रहते हैं, तो एक नया प्रश्न जोड़े जाने पर एसओ आपको सूचित करेगा। रेडिस यहां कैसे मदद कर सकता है?

रेडिस में एक पब-सब मॉडल है। आप चैनल बना सकते हैं, उदाहरण के लिए "channel_questions_tagged_redis"। फिर आप उपयोगकर्ताओं को किसी विशेष चैनल पर subscribe । जब कोई नया प्रश्न जोड़ा जाता है, तो आप उस चैनल को एक संदेश publish करेंगे। तब सभी उपयोगकर्ता संदेश प्राप्त करेंगे। वास्तव में ब्राउज़र को संदेश देने के लिए आपको वेब सॉकेट या धूमकेतु जैसी वेब तकनीक का उपयोग करना होगा, लेकिन रेडिस आपको सर्वर की तरफ सभी नलसाजी के साथ मदद करता है।

दृढ़ता, विश्वसनीयता आदि

कैश के विपरीत, रेडिस हार्ड डिस्क पर डेटा बनी रहती है। बेहतर विश्वसनीयता प्रदान करने के लिए आपके पास मास्टर-गुलाम सेटअप हो सकता है। अधिक जानने के लिए, यहां पर दृढ़ता और प्रतिकृति विषयों के माध्यम से जाएं - http://redis.io/documentation


रेडिस में अल्ट्रा-फास्ट लुआ-स्क्रिप्ट जैसे अद्वितीय क्षमताएं हैं। इसका निष्पादन समय सी आदेश निष्पादन के बराबर है। यह लॉक और सेमफोरस जैसे कई उन्नत वस्तुओं के काम के लिए आवश्यक परिष्कृत रेडिस डेटा मैनिपुलेशन के लिए परमाणुता भी लाता है।

Redison नामक मेमोरी डेटा ग्रिड में आधारित एक रेडिस है जो आसानी से जावा पर वितरित अनुप्रयोग बनाने की अनुमति देता है। वितरित Lock , Semaphore , ReadWriteLock Lock , CountDownLatch , ConcurrentMap CountDownLatch ऑब्जेक्ट्स और कई अन्य लोगों के लिए धन्यवाद।

क्लाउड में पूरी तरह से काम करता है और एडब्ल्यूएस लोचदार दर्द , एडब्ल्यूएस लोचदार क्लस्टर और एज़ूर रेडिस कैश समर्थन का समर्थन करता है


सिर्फ एक कैश नहीं।

  • स्मृति कुंजी-मूल्य भंडारण में
  • एकाधिक डेटाटाइप का समर्थन करें (तार, हैश, सूचियां, सेट, क्रमबद्ध सेट, बिटमैप्स, और हाइपरब्लॉग)
  • यह कैश डेटा को भौतिक भंडारण में स्टोर करने की क्षमता प्रदान करता है (यदि आवश्यक हो)।
  • समर्थन पब-सब मॉडल
  • रेडिस कैश उच्च उपलब्धता (मास्टर / गुलाम) के लिए प्रतिकृति प्रदान करता है




redis