2014-08-31 17 views
7

Ý tưởng là sử dụng ít kết nối hơn và hiệu suất tốt hơn. Kết nối có hết hạn bất kỳ lúc nào không?Cách chính xác để sử dụng StackExchange.Redis

Và cho một câu hỏi khác, hãy _redis.GetDatabase() mở kết nối mới?

private static ConnectionMultiplexer _redis; 
private static IDatabase _db; 

public RedisCacheProvider(string configuration) 
{ 
    if (_redis == null) 
     lock (myLock) 
      if (_redis == null) 
      { 
       _redis = ConnectionMultiplexer.Connect(configuration); 
       _db = _redis.GetDatabase(); 
      } 
} 

public async Task<string> GetString(string key) 
{ 
    string result = null; 

    RedisValue val = await _db.StringGetAsync(key); 

    if (val.HasValue) 
     result = val; 

    return result; 
} 

Trả lời

10

Không, bộ ghép kênh không hết hạn. Không GetDatabase không mở một kết nối mới. Tất cả được bao gồm trong basics.md - cụ thể là:

Đối tượng được trả về từ GetDatabase là một đối tượng truyền qua giá rẻ và không cần lưu trữ.

+0

Có tác động hiệu suất bằng cách sử dụng đối tượng IDatabase tĩnh hay không khi gọi hàm GetDatabase mỗi khi bạn cần gọi một trong các phương pháp của nó? – Aaron

+0

@Aaron cho db 0-15 và không có trạng thái không đồng bộ, trong các bản dựng gần đây: không hề. (lưu ý: '.GetDatabase()' là db 0 không có trạng thái async, vì vậy: không có phí). Đối với các phiên bản cũ hơn, dbs trên 15, hoặc với trạng thái async: tối thiểu - một đối tượng đơn lẻ được cấp phát –

Các vấn đề liên quan