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


255

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

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

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


3
से redis.io : Redis एक खुला स्रोत, उन्नत कुंजी-मान दुकान है। इसे अक्सर डेटा संरचना सर्वर के रूप में संदर्भित किया जाता है क्योंकि कुंजी में तार, हैश, सूची, सेट और सॉर्ट किए गए सेट हो सकते हैं। इसने कहा, मैंने आपके प्रश्न को बंद करने के लिए मतदान किया क्योंकि यह StackOverflow के प्रारूप में फिट नहीं है।
लीनस थिएल

29
मैं इसके एसओ प्रारूप से सहमत हूं। आपको कहां लगता है कि यह अधिक उचित होगा?
मैट इवांस

जवाबों:


631

नहीं, 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


15
यह PUB / SUB संबंधित आदेशों का उपयोग करते हुए एक अत्यंत सरल सेवा बस भी है।
जिम डेनिस

3
मैं उपयोगकर्ता द्वारा प्रश्न कैसे प्राप्त कर सकता हूं? क्या मुझे आपके प्रश्नों के साथ प्रत्येक उपयोगकर्ता के लिए एक सूची बनानी चाहिए, जैसे प्रश्न: उपयोगकर्ता: 1 या मुझे टैग का उपयोग करना चाहिए?
दिओगो अल्वेस

2
बहुत उपयोगी और विस्तार व्याख्या यह है कि मैं हर इतने पर देखा
त्रांग वू

5

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

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

4

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

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

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


1

वास्तव में रिश्तेदार डेटा प्रतिनिधित्व (या किसी भी प्रकार का डेटा प्रतिनिधित्व) और डेटाबेस भूमिका (कैश, स्थायी दृढ़ता आदि) के बीच कोई निर्भरता नहीं है।

रेडिस कैश के लिए अच्छा है यह सच है, लेकिन यह बहुत अधिक है तो बस एक कैश। यह पूरी तरह से मेमोरी डेटाबेस में उच्च गति है। यह डिस्क पर डेटा को बनाए रखता है। यह संबंधपरक नहीं है, यह की-वैल्यू स्टोरेज है।

हम इसका उत्पादन में उपयोग करते हैं। Redis हमें ऐसे सॉफ़्टवेयर बनाने में मदद करता है जो प्रति सेकंड हजारों अनुरोधों को संभालता है और पूरे प्राकृतिक जीवनचक्र के दौरान ग्राहक व्यवसाय के डेटा को रखता है।


0

रेडिस एक कैश है जो वितरित पर्यावरण / माइक्रोसिस्टवर्क वास्तुकला के लिए सबसे उपयुक्त है।

यह तेज, विश्वसनीय है, परमाणुता और निरंतरता प्रदान करता है और इसमें सेट, हैश, सूची आदि जैसे डेटाटाइप्स की सीमा होती है।

मैं पिछले एक साल से इसका उपयोग कर रहा हूं और यह वास्तव में एक उद्धारकर्ता के रूप में आता है जब आपको बहुत तेजी से किसी भी उत्पादन से संबंधित समाधान प्रदान करने की आवश्यकता होती है और किसी भी प्रदर्शन से संबंधित मुद्दों के लिए क्योंकि आप हमेशा इसे कैश डेटा के लिए उपयोग कर सकते हैं।


0

कैश सर्वर होने के अलावा, रेडिस विशेष रूप से एक डेटा संरचना सर्वर है। डेटा स्ट्रक्चर सर्वर के रूप में कैश होना बहुत मायने रखता है, क्योंकि डेटा स्ट्रक्चर प्रोग्राम या एप्लिकेशन के फंडामेंटल होते हैं । विचार करें कि आप SQL डेटाबेस को भंडारण तकनीक के रूप में उपयोग कर रहे हैं और एक सूची, एक हैश मैप, एक रैंकिंग सेट या इस तरह की चीजों का निर्माण करने की आवश्यकता है, यह गर्दन में दर्द की तरह है। रेडिस आपको बहुत ही सरल तरीके से सीधे इन कार्यक्षमता प्रदान कर सकता है , इस प्रकार विकास को बहुत सरल करता है।

दूसरी ओर, डेटा संरचना सर्वर को कैश के रूप में नहीं होना चाहिए। रेडिस के साथ संगत परियोजनाएं हैं लेकिन लगातार भंडारण इंजन हैं।


0

रेडिस डेटा स्ट्रिंग्स जैसे कि स्ट्रिंग्स, हैश, लिस्ट, सेट, श्रेणी क्वेरी के साथ सॉर्ट किए गए सेट, बिटमैप, हाइपरलॉग, रेडियस क्वेरी और स्ट्रीम के साथ जियोस्पेशियल इंडेक्स का समर्थन करता है। Redis में अंतर्निहित प्रतिकृति, Lua स्क्रिप्टिंग, LRU बेदखली, लेन-देन और ऑन-डिस्क दृढ़ता के विभिन्न स्तर हैं, और Redis Sentinel के माध्यम से उच्च उपलब्धता और Redis क्लस्टर के साथ स्वचालित विभाजन प्रदान करता है।

अजगर के साथ कार्यान्वयन

https://beyondexperiment.com/vijayravichandran06/redis-data-structure-with-python/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.