2011-09-25 66 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(); 
相关问题