Cho phép nói rằng bạn có một đoạn của trang hiển thị các bài đăng gần đây nhất và bạn hết hạn trong 30 phút. Tôi đang sử dụng Rails ở đây.Cách tốt nhất để kết hợp phân đoạn và đối tượng bộ nhớ đệm cho memcached và Rails
<% cache("recent_posts", :expires_in => 30.minutes) do %>
...
<% end %>
Rõ ràng bạn không cần thực hiện tra cứu cơ sở dữ liệu để nhận các bài đăng gần đây nhất nếu đoạn tồn tại, vì vậy bạn cũng có thể tránh được phí đó.
một cái gì đó như thế này trong bộ điều khiển mà dường như để làm việc gì tôi đang làm bây giờ là:
unless Rails.cache.exist? "views/recent_posts"
@posts = Post.find(:all, :limit=>20, :order=>"updated_at DESC")
end
Đây có phải là cách tốt nhất? Nó có an toàn không? Một điều tôi không hiểu là tại sao khóa là "recent_posts
" cho đoạn và "views/recent_posts
" khi kiểm tra sau, nhưng tôi đã đưa ra điều này sau khi xem memcached -vv
để xem nội dung đang sử dụng. Ngoài ra, tôi không thích sự trùng lặp bằng cách nhập "recent_posts
" theo cách thủ công, sẽ tốt hơn nếu giữ nguyên bản sao đó ở một nơi.
Ý tưởng?
Trong khi tôi nghĩ câu trả lời của Lar có thể rõ ràng hơn một chút, và tránh sử dụng lập trình meta, câu trả lời của bạn tốt hơn là quảng cáo nghe rõ hơn với MVC. Tôi đã upvoted cả hai người trong số họ là hợp lệ, nhưng sẽ để nó lên đến cộng đồng để quyết định (sẽ không chọn một như được chấp nhận :) Cảm ơn! –
Tôi đồng ý và tìm thấy giải pháp tốt này. Như để tái sử dụng quan điểm, vâng nói chung đó là một nguyên tắc tốt. Bạn sẽ phải để cho bộ điều khiển cung cấp khóa bộ nhớ cache mặc dù cho rằng để làm việc ở đây. BTW, vui vẻ đủ, tài liệu API về bộ nhớ đệm phân đoạn vi phạm nguyên tắc MVC trong ví dụ đầu tiên: http://api.rubyonrails.org/classes/ActionController/Caching/Fragments.html –