2011-09-25 16 views
15

Bir C#/ASP.NET 4 uygulamasında Booksleeve kütüphanesini kullanıyorum. Şu anda RedisConnection nesnesi, MonoLink sınıfımdaki statik bir nesnedir. Bu bağlantı açık tutulması halinde, ya da (şimdi yapıyorum gibi) ben her sorgu/işlemden sonra kapatmadan/açık olmalıdır? Sadece biraz kafam karıştı. İşte bugün itibariyle kullanıyorum nasıl:Kitaplığım bağlantımı hangi sıklıkla açmam/kapatmalıyım?

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; 
} 

sayesinde önceden herhangi yanıtlar/fikir için. Ayrıca, bu kütüphane için herhangi bir resmi belge var mı? Çok teşekkürler.^_ ^.

cevap

8

(şimdi yapıyorum gibi) her sorgu/işlem sonrasında o/kapama Bu bağlantı açık tutmak olmalı, yoksa açık olmalıdır?

eğer performans sorunları yeni bir bağlantınızın bir sorgu/işlem yapmak istediğiniz her zaman açık olacak ve Redis eşzamanlı bağlı istemcilerin yüksek düzeyde tasarlanmış olmasına rağmen, olabilir, eğer biraz havai Muhtemelen ki bunların sayısı onlarca bin civarındadır. Bildiğim kadarıyla (Redis kendisi bu özelliğe sahip olmadığı için) Eğer booksleeve supports bu malzeme olmadığını kontrol etmelisiniz böylece bağlantı havuzu, istemci kütüphaneleri tarafından yapılmalıdır biliyorum. Aksi takdirde bağlantı açtığınızda uygulama başlar ve ömür boyu (eğer paralel istemciler nedense REDIS bağlı gerekmez) var için açık tutmak gerekir.

Ayrıca, bu kütüphane için resmi belgelerin herhangi çeşit var mı?

Ben o tests folder kaynak kodları var olduğunu nasıl kullanılacağını ilgili bulabildim sadece dokümantasyon.

4

(@bzlm's answer devam), hep (Kapalı olduğu takdirde, bu oluşturuluyor. Else, mevcut bağlantı sunulmakta olduğu) BookSleeve kullanarak aynı Redis bağlantıyı sağlayan bir Singleton yarattı. Şuna

Görünüş: https://stackoverflow.com/a/8777999/290343

Böyle tüketmek:

RedisConnection connection = Redis.RedisConnectionGateway.Current.GetConnection(); 
İlgili konular