2014-04-06 19 views
5

Tôi tự hỏi những lợi ích của Redis với khách hàng C# của nó trên từ điển/ConcurrentDictionary và ngược lại.Lợi ích của Redis trên C# Dictionary

Tôi không chắc chắn khi sử dụng redis được coi là quá mức cần thiết cho bộ nhớ từ điển.

Cảm ơn.

+0

1/Tại sao bạn không tìm ra bằng cách thử? 2/Một câu hỏi chung như thế này có lẽ phù hợp hơn với http://programmers.stackexchange.com/. – Aybe

+0

Tôi muốn tìm hiểu cách redis nên được sử dụng, và những gì là lợi thế của nó hơn thường xuyên trong bộ nhớ C# đối tượng, nó không có nghĩa là một một trên một thanh chiến đấu giữa hai. –

+0

Có nhưng bạn biết làm thế nào các loại câu hỏi này kết thúc trong SO: câu trả lời chủ quan, do đó, hoặc là bạn có câu hỏi chính xác để hỏi hoặc bạn sẽ không nhận được bất kỳ câu trả lời nào hoặc nó sẽ bị đóng. – Aybe

Trả lời

6

Redis có lẽ là quá mức cần thiết cho một ứng dụng cục bộ, một máy. Đặc biệt khi dữ liệu không lớn.

Chủ yếu được sử dụng làm lớp bộ nhớ cache L2. Giả sử bạn có nhiều máy phục vụ ứng dụng của mình, mỗi máy có thể lưu bộ nhớ cache cục bộ của riêng mình nhưng Redis có thể đóng vai trò là bộ nhớ cache chung cho tất cả chúng. Giả sử người dùng ứng dụng của bạn duyệt đến một trang hoặc tính năng yêu cầu một số dữ liệu từ cơ sở dữ liệu phía sau của bạn. Sau đó, ứng dụng của bạn sẽ kiểm tra bộ nhớ cache L1 cục bộ của nó (ví dụ: Từ điển). Đó sẽ là phương pháp nhanh nhất vì nó không liên quan đến bất kỳ vòng lặp mạng nào. Nếu dữ liệu không có ở đó, nó sẽ tìm kiếm nó trong Redis làm bộ đệm ứng dụng toàn cầu. Nếu nó ở đó - tuyệt vời - lấy dữ liệu và đưa vào bộ đệm L1 cục bộ của bạn. Nếu không, hãy vào cơ sở dữ liệu, tìm nạp dữ liệu, đặt nó trong Redis (L2) và trong bộ nhớ cache cục bộ của bạn (L1).

Bạn có thể đọc thêm về điều đó here.

đó đang được nói, có nhiều tập quán cho Redis khác hơn là chỉ bộ nhớ cache - Pub/chức năng Sub, SET s, SORTED SET s và chức năng trên chúng (như nút giao thông, các công đoàn vv) và thậm chí chức năng thông minh trên STRING loại, chẳng hạn như hoạt động bitwise.

+0

@Aviran Cohen, câu trả lời của tôi có giúp bạn không? –

2

Như bạn đã biết, việc sử dụng Redis cho bộ nhớ đệm trong máy chủ sẽ khiến bạn trở nên quá mức cần thiết.

Nhưng sử dụng Redis với C# trong một ứng dụng phân phối chắc chắn cung cấp một số lợi ích (tất cả các hoạt động dưới đây là thread-safe):

  1. Bạn có thể xây dựng một ORM wrapper tùy chỉnh cho dự án của bạn trong C# như thế các đối tượng .NET của bạn từ một máy chủ có thể được truy cập liền mạch từ một máy chủ khác. Bạn có thể lưu trữ các đối tượng Dictionary trong Redis hashes, các đối tượng List trong danh sách Redis, HashSet đối tượng trong Redis set vv .. Nếu giá trị của bạn là chuỗi/ints/float không cần phải serialize!
  2. Xuất bản/Đăng ký/từ nhiều máy chủ/chủ đề.
  3. Dịch vụ/lịch biểu C# có thể hưởng lợi từ việc duy trì các tác vụ hoặc đối tượng trong danh sách Redis và nhận trình kích hoạt sự kiện bằng cách sử dụng API blPop của Redis.
  4. Duy trì các mục 'top 10', 'dưới 10', v.v. sử dụng số sorted set s của Redis.

Nhưng vào cuối ngày, tất cả phụ thuộc vào trường hợp sử dụng của bạn.