मेरी साइट पर डीबी लोड वास्तव में उच्च हो रहा है, इसलिए मेरे लिए सामान्य प्रश्नों को कैश करने का समय है जिसे कई बार एक घंटे कहा जाता है जहां परिणाम नहीं बदल रहे हैं। तो मेरे शहर मॉडल पर उदाहरण के लिए मैं निम्न कार्य करें:रेल कैशिंग डीबी क्वेरीज और सर्वोत्तम अभ्यास
def self.fetch(id)
Rails.cache.fetch("city_#{id}") { City.find(id) }
end
def after_save
Rails.cache.delete("city_#{self.id}")
end
def after_destroy
Rails.cache.delete("city_#{self.id}")
end
तो अब जब मैं (1) पहली बार मैं डीबी लेकिन अगले 1000 बार मैं स्मृति से परिणाम प्राप्त मारा City.find कर सकते हैं। महान। लेकिन शहर में अधिकांश कॉल सिटी नहीं हैं। 1 (लेकिन) @ user.city.name जहां रेल्स fetch का उपयोग नहीं करता है लेकिन फिर डीबी से पूछताछ करता है ... जो समझ में आता है लेकिन वास्तव में मैं इसे नहीं करना चाहता हूं।
मैं सिटी.फिंड (@ user.city_id) कर सकता हूं लेकिन वह बदसूरत है।
तो मेरे लिए आपका प्रश्न है। स्मार्ट लोग क्या कर रहे हैं? यह करने का सही तरीका क्या है?
Memoization सिर्फ Rails.cache लपेटता पर कुछ अच्छा लेख है। मुझे नहीं लगता कि यह मॉडल एसोसिएशन की मदद करेगा जैसे आप ढूंढ रहे हैं। – Bill
ज्ञापन रेल कैश को लपेटता नहीं है। Rails.cache आमतौर पर प्रक्रियाओं के बीच साझा कैश स्टोर होता है (जैसे कि आप वास्तव में कैशिंग लाभ प्राप्त करते हैं)। ज्ञापन केवल वर्तमान प्रक्रिया के भीतर होता है। – Michael