परदे के पीछे, SE.Redis पैकेट विखंडन से बचने के लिए काफी काम करता है, इसलिए यह आश्चर्य की बात नहीं है कि यह आपके मामले में काफी समान है। बैचिंग और फ्लैट पाइपलाइनिंग के बीच मुख्य अंतर हैं:
- एक बैच को एक ही मल्टीप्लेक्सर पर प्रतिस्पर्धी संचालन के साथ कभी भी इंटरलीव नहीं किया जाएगा (हालांकि इसे सर्वर पर इंटरलीव किया जा सकता है; इससे बचने के लिए आपको
multi
का उपयोग करने की आवश्यकता है। /exec
लेन-देन या लुआ स्क्रिप्ट) - एक बैच हमेशा छोटे आकार के पैकेट की संभावना से बचता है, क्योंकि वह समय से पहले सभी डेटा के बारे में जानता है
- लेकिन साथ ही, कुछ भी भेजे जाने से पहले पूरे बैच को पूरा किया जाना चाहिए, इसलिए इसके लिए अधिक इन-मेमोरी बफरिंग की आवश्यकता होती है और कृत्रिम रूप से विलंबता का परिचय दे सकता है
ज्यादातर मामलों में, आप बैचिंग से बचकर बेहतर प्रदर्शन करेंगे, क्योंकि SE.Redis जो कुछ भी करता है उसमें से अधिकांश स्वचालित रूप से प्राप्त करता है। बस काम जोड़ते समय।
अंतिम नोट के रूप में; यदि आप स्थानीय ओवरहेड से बचना चाहते हैं, तो एक अंतिम तरीका यह हो सकता है:
redisDB.SetAdd(string.Format(keyFormat, row.Field<int>("Id")),
row.Field<int>("Value"), flags: CommandFlags.FireAndForget);
यह सब कुछ तार के नीचे भेजता है, न तो प्रतिक्रियाओं की प्रतीक्षा कर रहा है और न ही अधूरा आवंटित कर रहा है Task
s भविष्य के मूल्यों का प्रतिनिधित्व करने के लिए। हो सकता है कि आप Ping
. जैसा कुछ करना चाहें अंत में बिना आग और भूल जाओ, सर्वर की जांच करने के लिए अभी भी आपसे बात कर रहा है। ध्यान दें कि फायर-एंड-फॉरगेट का उपयोग करने का मतलब यह है कि आपको कोई भी सर्वर त्रुटि दिखाई नहीं देगी जो रिपोर्ट की जाती है।