2012-06-18 37 views
20

Tôi đã sử dụng Dalli cho đến bây giờ để lưu vào bộ nhớ đệm và hôm nay tôi đã xem qua Redis -Store.Dalli vs Redis-Store cho Rails App

Tôi tự hỏi tôi có nên chuyển sang cửa hàng lại không. Ứng dụng của tôi đã sử dụng redis cho một số nội dung nhất định nên tôi có một máy chủ redis khá lớn (về mặt tài nguyên) và tôi cũng có một máy chủ ghi nhớ khác. Vì vậy, nếu tôi chuyển sang redis-store nó sẽ có nghĩa là tôi có thể loại bỏ các máy chủ memcached (máy chủ ít hơn để duy trì + chi phí ít hơn).

Có ai đó đã so sánh 2 giải pháp này.

  1. Performance
  2. Có một thả thay thế (tôi có thể chuyển đổi giữa các 2 bất cứ lúc nào mà không cần thay đổi mã)
  3. Bất kỳ thứ khác tôi nên biết.

Trả lời

19

Redis có thể được sử dụng làm bộ nhớ cache hoặc làm cửa hàng cố định, nhưng nếu bạn cố gắng kết hợp cả hai, bạn có thể có "vấn đề thú vị".

Khi bạn có memcached, yo có một số lượng bộ nhớ tối đa cho quá trình, vì vậy khi memcached được đầy đủ nó sẽ tự động loại bỏ các mục gần đây nhất được sử dụng để nhường chỗ cho các mục mới.

Bạn có thể định cấu hình Redis để có hành vi đó, nhưng bạn không muốn thực hiện điều đó nếu bạn đang sử dụng Redis để lưu trữ liên tục, vì trong trường hợp đó bạn có khả năng sẽ mất các khóa có nghĩa là liên tục.

Vì vậy, nếu bạn đang sử dụng lưu trữ liên tục cho Redis, bạn sẽ cần phải có hai quy trình Redis khác nhau: một cho các khóa liên tục của bạn, một cho các bộ nhớ đệm. Tất nhiên bạn luôn có thể chỉ có một quy trình và đặt thời gian hết hạn cho mọi mục trong bộ nhớ cache, nhưng không ai đảm bảo với bạn rằng bạn không đạt đến giới hạn bộ nhớ trước khi hết hạn và bạn mất dữ liệu, vì vậy trong thực tế bạn sẽ cần hai quy trình. Bên cạnh đó, nếu bạn đang thiết lập một cấu hình master/slave cho dữ liệu liên tục của bạn và bạn lưu trữ bộ nhớ cache trên cùng một máy chủ, về cơ bản bạn đang lãng phí RAM, vì vậy các quá trình riêng biệt là cách để đi. Giới thiệu về hiệu suất, cả redis và memcached là RẤT performant, và trên các xét nghiệm khác nhau họ đang trên cùng một phạm vi khi nói đến có được/trích xuất dữ liệu, nhưng memcached là tốt hơn khi bạn chỉ cần một bộ nhớ cache.

Tại sao lại như vậy? Trước hết, kể từ khi memcached chỉ có một nhiệm vụ, đó là lưu trữ khóa/giá trị, nó không có bất kỳ chi phí khi nói đến lưu trữ siêu dữ liệu. Redis mặt khác cung cấp các cấu trúc dữ liệu khác nhau, do đó, nó lưu trữ nhiều siêu dữ liệu hơn mỗi khóa. Một ví dụ về điều này: đó là "rẻ hơn" để lưu trữ dữ liệu trên một băm trong Redis thay vì sử dụng các khóa riêng lẻ. Bạn không nhận được bất kỳ điều này trên memcached, vì chỉ có một loại dữ liệu. Điều này có nghĩa với cùng một lượng bộ nhớ trong máy chủ của bạn, bạn có thể lưu trữ nhiều dữ liệu hơn trên memcached hơn là trên redis. Nếu bạn có một cài đặt tương đối nhỏ, bạn không thực sự quan tâm, nhưng thời điểm bạn bắt đầu thấy sự tăng trưởng, hãy tin tôi rằng bạn sẽ muốn giữ những dữ liệu đó dưới sự kiểm soát.

Vì vậy, nhiều như tôi thích Redis, tôi muốn có memcached cho nhu cầu bộ nhớ đệm của tôi và redis cho lưu trữ liên tục của tôi/lưu trữ tạm thời/hàng đợi nhu cầu. Tôi vẫn sử dụng redis như là một bộ nhớ cache "" nhưng không phải là một tạm thời với hết hạn, nhưng như là một bộ nhớ cache tra cứu để tiết kiệm đọc từ một lưu trữ đắt tiền hơn. Ví dụ: tôi giữ một ánh xạ giữa ID người dùng và biệt hiệu trên Redis. Tôi không bao giờ hết hạn những ánh xạ này, vì vậy Redis là một nơi hoàn hảo cho nó.

Trong trường hợp bạn đang xử lý một lượng nhỏ dữ liệu, thì ý tưởng của bạn là có một công nghệ duy nhất cho mọi thứ, nhưng thời điểm bạn bắt đầu tăng hơn vài trăm MB, tôi sẽ nói cả hai.

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