Redis cache बनाम सीधे मेमोरी का उपयोग करना


141

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

मैंने कैश स्टोर डेटाबेस के रूप में मेमोरी का उपयोग करते हुए रेडिस को सुना है, तो क्या अंतर है यदि मैं डेटा को स्टोर करने के लिए ऑब्जेक्ट या शब्दकोश डेटाटाइप के रूप में एक चर का उपयोग करता हूं? पसंद:

var cache = {
    key: {

    },
    key: {

    }
    ...
}

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

जवाबों:


221

Redis एक दूरस्थ डेटा संरचना सर्वर है। यह निश्चित रूप से स्थानीय मेमोरी में डेटा को स्टोर करने की तुलना में धीमा है (क्योंकि इसमें डेटा को लाने / संग्रहीत करने के लिए सॉकेट राउंडट्रिप्स शामिल हैं)। हालांकि, यह कुछ दिलचस्प गुण भी लाता है:

  • Redis को आपके अनुप्रयोगों की सभी प्रक्रियाओं द्वारा एक्सेस किया जा सकता है, संभवतः कई नोड्स पर चल रहा है (कुछ स्थानीय मेमोरी प्राप्त नहीं कर सकता है)।

  • रेडिस मेमोरी स्टोरेज काफी कुशल है, और एक अलग प्रक्रिया में किया जाता है। यदि एप्लिकेशन एक ऐसे प्लेटफ़ॉर्म पर चलता है जिसकी मेमोरी कूड़ा एकत्र (नोड.जेएस, जावा, आदि ...) है, तो यह बहुत बड़ी मेमोरी कैश / स्टोर को संभालने की अनुमति देता है। व्यवहार में, बहुत बड़े ढेर कचरा एकत्र भाषाओं के साथ अच्छा प्रदर्शन नहीं करते हैं।

  • जरूरत पड़ने पर डिस्क पर डेटा को रेडिस जारी रख सकता है।

  • रेडिस एक साधारण कैश की तुलना में थोड़ा अधिक है: यह विभिन्न डेटा संरचनाएं, विभिन्न आइटम बेदखली नीतियों, अवरुद्ध कतारों, पब / उप, परमाणु, लुआ स्क्रिप्टिंग, आदि प्रदान करता है ...

  • रेडिस उच्च-उपलब्धता को लागू करने के लिए एक मास्टर / दास तंत्र के साथ अपनी गतिविधि को दोहरा सकता है।

मूल रूप से, यदि आपको एक ही डेटा साझा करने वाले कई नोड्स पर स्केल करने के लिए आपके आवेदन की आवश्यकता है, तो Redis (या किसी अन्य रिमोट की / वैल्यू स्टोर) जैसी चीज़ की आवश्यकता होगी।


5
आपका अंतिम बिंदु विशेष रूप से ऐसा लगता है जैसे कि Rlite जैसी चीजें थोड़ी व्यर्थ हैं - एक शब्दकोश स्टोर ज्यादातर उपयोग-मामलों में उपयुक्त होगा जहां आपके पास एक एकल प्रक्रिया है। क्या वह सही है?
naught101

1
हाँ। IMO, Rlite का हित काफी सीमित है।
डिडिएर स्पेज़िया

इन संकेतों के लिए धन्यवाद, इसलिए रेडिस पैमाने पर बहुत अच्छा है लेकिन मैं औसत 300 - 500 ऑब्जेक्ट के साथ एक साधारण चैट'ऐप के मामले में मानता हूं कि मेमोरियल में पुनः प्राप्त करने के लिए, इन-मेमोरी डेटा संरचना बहुत अच्छी तरह से काम करेगी यदि थाइज के बाद से तेजी से न हो थोड़ी संख्या में हैं?
वेबवॉमैन

2
@DidierSpezia very large heaps do not perform well with garbage collected languagesआप बता सकते हैं क्यों?
रोटरवेलर

1
@roottraveller, मेरा मानना ​​है कि यह इसलिए है क्योंकि कचरा संग्रहण प्रक्रिया में आम तौर पर आपके एप्लिकेशन ("स्टॉप-द-वर्ल्ड") के निष्पादन को ढेर मेमोरी को मुक्त करने के लिए बाधित करना पड़ता है, और ढेर को बड़ा कर देता है, यह व्यवधान आम तौर पर लंबे समय तक रहता है।
Regorsmitz

3

वर्तमान में हम सर्वर कम आर्किटेक्चर में अधिक आकर्षित हैं जहां प्रत्येक अनुरोध अलग कंटेनर में जा सकता है। इस मामले में रेडिस बहुत महत्वपूर्ण भूमिका निभा सकते हैं।

हम सर्वर में साधारण कैश का उपयोग कम नहीं कर सकते हैं क्योंकि हम यह सुनिश्चित नहीं कर सकते कि हमारा अनुरोध उसी कंटेनर में परोसा जाए जहां हमारा साधारण कैश संग्रहीत है।

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

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