2009-04-08 29 views
7

Tôi có một ứng dụng đường ray nơi tôi muốn sử dụng cả memcached và bộ nhớ cache lưu trữ tập tin, cho các mục đích khác nhau.Cách sử dụng nhiều bộ đệm trong đường ray?

Tôi muốn sử dụng bộ nhớ cache lưu trữ tệp để giữ một số lượng lớn các trang không thay đổi thường xuyên (một số không) - tức là lưu vào bộ nhớ đệm - và sử dụng memcached cho mọi thứ khác (hành động và bộ nhớ đệm DB, v.v.). Lý do là các trang được lưu trữ trên bộ nhớ cache lưu trữ tệp có thể yêu cầu một lượng lớn dung lượng lưu trữ, nhưng hầu hết các bộ nhớ sẽ được truy cập thường xuyên.

Điều này có thể thực hiện hoặc sẽ định cấu hình memcached là bộ nhớ cache có nghĩa là nó cũng được sử dụng để lưu vào bộ nhớ đệm trang không?

Là câu hỏi phụ, cách an toàn để xóa trang khỏi bộ nhớ cache lưu trữ tệp ở một dạng công việc định kỳ nào đó, vì dường như không có tùy chọn chỉ định ttl cho bộ nhớ cache này. Ví dụ một lệnh tìm UNIX sẽ nhanh chóng tìm và xóa tất cả các trang cũ hoặc các trang chưa được truy cập trong một thời gian dài - điều này có an toàn không khi máy chủ ứng dụng có khả năng cố gắng phục vụ một trong các trang đó vào thời điểm đó (tho điều này là rất khó)? Nếu không thì cách tốt nhất để làm điều này là gì.

+0

Bạn có tìm ra bất kỳ điều gì về việc sử dụng cả hai bộ nhớ cache không? Tôi cũng muốn làm điều này. Hiện tại chúng tôi đang chạy Rails 2.0.2, điều mà tôi cho là có vấn đề hơn ... – Chinasaur

+0

Có vẻ như OK (và mặc định) để kết hợp bộ nhớ đệm của các trang và (nếu bạn định cấu hình memcached ở tất cả) bộ nhớ bộ nhớ đệm của phần còn lại – frankodwyer

Trả lời

2

Nếu bạn chỉ muốn sử dụng hệ thống tệp để lưu vào bộ nhớ đệm trang và ghi nhớ hành động và lưu vào bộ đệm, bạn ổn. Bộ nhớ đệm trang luôn luôn sử dụng hệ thống tệp. Chỉ cần nhớ rằng bộ nhớ đệm trang bỏ qua ứng dụng Rails của bạn, vì vậy bạn không thể sử dụng nó cho các trang có nội dung thay đổi từ người dùng sang người dùng hoặc cho các trang được truy cập được kiểm soát bằng bộ lọc.

Liên quan đến việc xóa trang, trên Unix, một tệp có thể bị xóa, nhưng nó không thực sự bị xóa khỏi đĩa cho đến khi tất cả các xử lý tệp đang mở được đóng. Nếu máy chủ ứng dụng đã mở tệp để phân phát yêu cầu và lệnh tìm sẽ xóa nó sau một giây, máy chủ ứng dụng sẽ không đột nhiên nhận được lỗi khi nó cố gắng đọc.

Bạn cũng có thể cân nhắc xóa find xóa tệp dựa trên thời gian truy cập cuối cùng, thay vì tạo hoặc sửa đổi và sử dụng trình quét trong ứng dụng Rails của bạn để xóa trang được lưu trong bộ nhớ cache.

2

Cách tiếp cận đơn giản hơn có thể là sử dụng bộ đệm ẩn http của ứng dụng làm bộ đệm trang thay vì hai cửa hàng trong đường ray. Bằng cách này, bạn có thể sử dụng tiêu đề http để kiểm soát hành vi bộ nhớ cache, bao gồm cả TTL. Những giới hạn tương tự này cũng sẽ áp dụng cho bộ đệm cache của trình duyệt như là một phần thưởng tốt đẹp.

Varnish hoạt động hiệu quả cao, nhưng sẽ yêu cầu thiết lập một đoạn chuyển động khác trong môi trường lưu trữ của bạn dưới dạng proxy. Điều này có thể vẫn đáng giá tùy thuộc vào những gì bạn đang làm.

Cách tiếp cận đơn giản hơn có thể là Rack::Cache, việc này sẽ dễ dàng thiết lập miễn là bạn đang sử dụng phiên bản giá được kích hoạt của đường ray.

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