मान लें कि आपके पास पृष्ठ का एक टुकड़ा है जो सबसे हालिया पोस्ट प्रदर्शित करता है, और आप इसे 30 मिनट में समाप्त कर देते हैं। मैं यहाँ रेल का उपयोग कर रहा हूँ।memcached और Rails के लिए खंड और ऑब्जेक्ट कैशिंग को गठबंधन करने का सबसे अच्छा तरीका
<% cache("recent_posts", :expires_in => 30.minutes) do %>
...
<% end %>
जाहिर है आप अगर टुकड़ा मौजूद सबसे हाल की पोस्ट प्राप्त करने के लिए डेटाबेस देखने क्या करने की जरूरत नहीं है, इसलिए तुम भी है कि भूमि के ऊपर से बचने के लिए सक्षम होना चाहिए।
नियंत्रक में कुछ इस तरह जो काम करने के लिए लगता है क्या मैं अब कर रहा हूँ है:
unless Rails.cache.exist? "views/recent_posts"
@posts = Post.find(:all, :limit=>20, :order=>"updated_at DESC")
end
यह सबसे अच्छा तरीका है? क्या ये सुरक्षित है?
एक बात मुझे समझ नहीं आता क्यों कुंजी "recent_posts
" टुकड़ा के लिए है और "views/recent_posts
" जब बाद में जाँच, लेकिन मैं memcached -vv
देख यह क्या उपयोग कर रहा था देखने के लिए करने के बाद इस के साथ आया है। साथ ही, मुझे मैन्युअल रूप से "recent_posts
" दर्ज करने के डुप्लिकेशंस को पसंद नहीं है, यह एक ही स्थान पर रखना बेहतर होगा।
विचार?
जबकि मुझे लगता है कि लैर का उत्तर थोड़ा और स्पष्ट हो सकता है, और मेटा प्रोग्रामिंग का उपयोग करने से बचाता है, तो आपका जवाब बेहतर है कि विज्ञापन एमवीसी के लिए अधिक बारीकी से सुनता है। मैंने दोनों को वैध के रूप में उखाड़ फेंक दिया है, लेकिन यह निर्णय लेने के लिए समुदाय को छोड़ देगा (स्वीकार्य के रूप में एक नहीं उठाएगा :) धन्यवाद! –
मैं सहमत हूं, और यह भी एक अच्छा समाधान खोजने के लिए। दृश्य का पुन: उपयोग करने के लिए, सामान्य रूप से हाँ यह एक अच्छा सिद्धांत है। आपको नियंत्रक को कैश कुंजी की आपूर्ति करने की आवश्यकता होगी, हालांकि इसके लिए यहां काम करना है। बीटीडब्ल्यू, मज़ेदार रूप से पर्याप्त, खंड कैशिंग पर एपीआई दस्तावेज पहले उदाहरण में एमवीसी सिद्धांत का उल्लंघन करता है: http://api.rubyonrails.org/classes/ActionController/Caching/Fragments.html –