2011-09-25 25 views
15

Tôi đang sử dụng thư viện Booksleeve trong ứng dụng C#/ASP.NET 4. Hiện tại đối tượng RedisConnection là một đối tượng tĩnh trên lớp MonoLink của tôi. Tôi có nên giữ kết nối này mở hay tôi nên mở/đóng nó sau mỗi truy vấn/giao dịch (như tôi đang làm bây giờ)? Chỉ hơi bối rối. Dưới đây là cách tôi đang sử dụng tính năng này, kể từ bây giờ:Tôi nên mở/đóng kết nối Booksleeve của mình bao lâu một lần?

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

Cảm ơn trước, cho mọi phản hồi/thông tin chi tiết. Ngoài ra, có bất kỳ loại tài liệu chính thức nào cho thư viện này không? Cảm ơn bạn S.O.^_ ^.

Trả lời

8

Tôi có nên giữ kết nối này mở hay tôi mở/đóng sau mỗi truy vấn/giao dịch (như tôi đang làm bây giờ)?

Có thể có một phí nhỏ nếu bạn mở kết nối mới mỗi khi bạn muốn thực hiện truy vấn/giao dịch và mặc dù redis được thiết kế cho các khách hàng được kết nối đồng thời ở mức cao. khoảng hàng chục ngàn. Theo như tôi biết kết nối tổng hợp nên được thực hiện bởi các thư viện khách hàng (vì redis chính nó không có chức năng này), vì vậy bạn nên kiểm tra xem booksleeve supports công cụ này. Nếu không, bạn nên mở kết nối khi ứng dụng của bạn bắt đầu và giữ nó mở cho suốt đời của nó (trong trường hợp bạn không cần các máy khách song song kết nối với redis vì một số lý do).

Ngoài ra, có bất kỳ loại tài liệu chính thức nào cho thư viện này không?

Tài liệu duy nhất tôi có thể tìm thấy về cách sử dụng nó là tests folder trong mã nguồn của nó.

25

According to các author of Booksleeve,

Kết nối là an toàn và dự định sẽ được chia sẻ ồ ạt chủ đề; không thực hiện kết nối cho mỗi thao tác.

+1

này nên là câu trả lời được chấp nhận – welegan

4

Để tham khảo (tiếp tục @bzlm's answer), tôi đã tạo Singleton luôn cung cấp kết nối Redis tương tự bằng BookSleeve (nếu đã đóng, nó đang được tạo. Khác, kết nối hiện có đang được phục vụ).

Nhìn này: https://stackoverflow.com/a/8777999/290343

Bạn tiêu thụ nó như thế:

RedisConnection connection = Redis.RedisConnectionGateway.Current.GetConnection(); 
Các vấn đề liên quan