2011-09-25 13 views
15

मैं एक सी #/एएसपी.नेट 4 आवेदन में पुस्तकें लाइब्रेरी का उपयोग कर रहा हूं। वर्तमान में RedisConnection ऑब्जेक्ट मेरी मोनोलिंक कक्षा में एक स्थिर वस्तु है। क्या मुझे यह कनेक्शन खुला रखना चाहिए, या क्या मुझे प्रत्येक क्वेरी/लेनदेन के बाद इसे खोलना/बंद करना चाहिए (जैसा कि अब मैं कर रहा हूं)? बस थोड़ा उलझन में। यहां बताया गया है कि मैं इसका उपयोग कैसे कर रहा हूं, अब तक:मुझे अपने बुकस्लीव कनेक्शन को कितनी बार खोलना/बंद करना चाहिए?

public static MonoLink CreateMonolink(string URL) 
{ 
    redis.Open(); 
    var transaction = redis.CreateTransaction(); 

    string Key = null; 

    try 
    { 
     var IncrementTask = transaction.Strings.Increment(0, "nextmonolink"); 
     if (!IncrementTask.Wait(5000)) 
     { 
      transaction.Discard(); 
      throw new System.TimeoutException("Monolink index increment timed out."); 
     } 

     // Increment complete 
     Key = string.Format("monolink:{0}", IncrementTask.Result); 

     var AddLinkTask = transaction.Strings.Set(0, Key, URL); 
     if (!AddLinkTask.Wait(5000)) 
     { 
      transaction.Discard(); 
      throw new System.TimeoutException("Add monolink creation timed out."); 
     } 

     // Run the transaction 
     var ExecTransaction = transaction.Execute(); 
     if (!ExecTransaction.Wait(5000)) 
     { 
      throw new System.TimeoutException("Add monolink transaction timed out."); 
     } 
    } 
    catch (Exception ex) 
    { 
     transaction.Discard(); 
     throw ex; 
    } 
    finally 
    { 
     redis.Close(false); 
    } 

    // Link has been added to redis 
    MonoLink ml = new MonoLink(); 
    ml.Key = Key; 
    ml.URL = URL; 

    return ml; 
} 

धन्यवाद, अग्रिम में, किसी भी प्रतिक्रिया/अंतर्दृष्टि के लिए। साथ ही, क्या इस पुस्तकालय के लिए आधिकारिक दस्तावेज का कोई भी प्रकार है? आपका धन्यवाद।^_ ^।

उत्तर

8

क्या मुझे यह कनेक्शन खुला रखना चाहिए, या क्या मुझे प्रत्येक क्वेरी/लेनदेन के बाद खोलना/बंद करना चाहिए (जैसा कि अब मैं कर रहा हूं)?

शायद एक छोटे से भूमि के ऊपर है अगर आप अगर एक नया कनेक्शन हर बार जब आप एक प्रश्न/लेनदेन बनाना चाहते खुल जाएगा और यद्यपि redis समवर्ती जुड़े ग्राहकों के उच्च स्तर के लिए डिज़ाइन किया गया है, वहाँ हो सकता है प्रदर्शन की समस्याओं उनकी संख्या हजारों के आसपास है। जहां तक ​​मुझे पता है कि क्लाइंट लाइब्रेरीज़ द्वारा कनेक्शन पूलिंग किया जाना चाहिए (क्योंकि रेडिस में यह कार्यक्षमता नहीं है), इसलिए आपको यह जांचना चाहिए कि क्या किताबें supports यह सामान है। अन्यथा जब आपका एप्लिकेशन शुरू होता है तो कनेक्शन खोलना चाहिए और इसे अपने जीवनकाल के लिए खोलना चाहिए (यदि आपको किसी कारण से रेडिस से जुड़े समानांतर क्लाइंट की आवश्यकता नहीं है)।

इसके अलावा, क्या इस पुस्तकालय के लिए कोई भी आधिकारिक दस्तावेज है?

केवल प्रलेखन मैं उपयोग करने के लिए कि यह कैसे था उस में tests folder स्रोत कोड है के बारे में पता लगाने के लिए सक्षम था।

25

According toauthor of Booksleeve,

कनेक्शन धागा सुरक्षित और बड़े पैमाने पर साझा किया जा करने का इरादा है, प्रति ऑपरेशन कनेक्शन न करें।

+1

यह स्वीकार किए जाते हैं जवाब होना चाहिए – welegan

4

संदर्भ के लिए (@bzlm's answer जारी), मैं एक सिंगलटन कि हमेशा (यदि यह बंद है, यह बनाया जा रहा है। नहीं तो, मौजूदा कनेक्शन कार्य किया जा रहा है) BookSleeve का उपयोग कर एक ही Redis कनेक्शन प्रदान करता है बनाया। इस पर

देखो: https://stackoverflow.com/a/8777999/290343

आपको लगता है कि जैसे कि यह उपभोग:

RedisConnection connection = Redis.RedisConnectionGateway.Current.GetConnection(); 
संबंधित मुद्दे