यह संतरे से सेब की तुलना है। देखें http://redis.io/topics/benchmarks
Redis एक कुशल रिमोट है डेटा भंडार। हर बार रेडिस पर एक कमांड निष्पादित होने पर, रेडिस सर्वर को एक संदेश भेजा जाता है, और यदि क्लाइंट सिंक्रोनस है, तो यह उत्तर की प्रतीक्षा कर रहा है। तो आदेश की लागत से परे, आप नेटवर्क राउंडट्रिप या आईपीसी के लिए भुगतान करेंगे।
आधुनिक हार्डवेयर पर, नेटवर्क राउंडट्रिप या आईपीसी अन्य कार्यों की तुलना में आश्चर्यजनक रूप से महंगे हैं। यह कई कारकों के कारण है:
- माध्यम की कच्ची विलंबता (मुख्य रूप से नेटवर्क के लिए)
- ऑपरेटिंग सिस्टम शेड्यूलर की विलंबता (लिनक्स/यूनिक्स पर गारंटी नहीं)
- मेमोरी कैश मिस करना महंगा है, और क्लाइंट और सर्वर प्रोसेस को इन/आउट शेड्यूल करते समय कैश मिस होने की संभावना बढ़ जाती है।
- हाई-एंड बॉक्स पर, NUMA साइड इफेक्ट
अब, परिणामों की समीक्षा करते हैं।
जनरेटर का उपयोग करने वाले कार्यान्वयन और फ़ंक्शन कॉल का उपयोग करने वाले की तुलना में, वे रेडिस के लिए समान संख्या में राउंडट्रिप उत्पन्न नहीं करते हैं। जनरेटर के साथ आपके पास बस:
while time.time() - t - expiry < 0:
yield r.get(fpKey)
तो प्रति पुनरावृत्ति 1 राउंडट्रिप। फ़ंक्शन के साथ, आपके पास है:
if r.exists(fpKey):
return r.get(fpKey)
तो प्रति पुनरावृत्ति 2 राउंडट्रिप। कोई आश्चर्य नहीं कि जनरेटर तेज है।
बेशक आपको इष्टतम प्रदर्शन के लिए उसी रेडिस कनेक्शन का पुन:उपयोग करना चाहिए। एक बेंचमार्क चलाने का कोई मतलब नहीं है जो व्यवस्थित रूप से कनेक्ट/डिस्कनेक्ट हो।
अंत में, रेडिस कॉल और फ़ाइल रीड के बीच प्रदर्शन अंतर के संबंध में, आप बस स्थानीय कॉल की तुलना रिमोट से कर रहे हैं। फाइल रीड ओएस फाइल सिस्टम द्वारा कैश की जाती है, इसलिए वे कर्नेल और पायथन के बीच तेज मेमोरी ट्रांसफर ऑपरेशन हैं। यहां कोई डिस्क I/O शामिल नहीं है। रेडिस के साथ, आपको राउंडट्रिप की लागत का भुगतान करना होगा, इसलिए यह बहुत धीमा है।