2011-09-25 67 views
15

我在C#/ ASP.NET 4應用程序中使用Booksleeve庫。目前,RedisConnection對象是我的MonoLink類中的一個靜態對象。我應該保持這個連接是否打開,還是應該在每個查詢/事務之後打開/關閉它(正如我現在所做的那樣)?只是有點困惑。以下是我如何使用它:截至目前:我應該多久打開一次/關閉我的書籍連接?

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的是專爲高級別併發連接的客戶端,可能存在性能問題,其數量數以萬計。據我所知,連接池應該由客戶端庫來完成(因爲redis本身沒有這個功能),所以你應該檢查這些東西是否適合書寫。否則,應該在應用程序啓動時打開連接,並在其生命週期中保持打開狀態(以防因某種原因而不需要並行客戶端連接到redis)。

此外,有沒有這種庫的官方文檔?

我能找到的關於如何使用它的唯一文檔是其源代碼中的tests folder

4

僅供參考(繼續@bzlm's answer),我創建了一個單身始終提供使用BookSleeve相同Redis的連接(如果它是封閉的,它被創建。否則,現有的連接被服務)。

看看這個:https://stackoverflow.com/a/8777999/290343

你消耗它這樣:

RedisConnection connection = Redis.RedisConnectionGateway.Current.GetConnection(); 
相關問題