जवाबों:
यदि आप दृश्य या db_query () का उपयोग करते हैं तो कैशिंग के लिए मैटर नहीं करता है। कैशिंग हमेशा एक ही काम करता है, जब कैश की कमी पूरी तरह से आपके ऊपर है तो डेटा कैसे लाया जाता है।
कुछ उदाहरणों को देखने के लिए, आप उन कार्यों को देख सकते हैं जो cache_get () का उपयोग करते हैं , उदाहरण के लिए variable_initialize () ।
यदि आपके फ़ंक्शन को कई बार कहा जाता है, तो आप शायद इसे स्थैतिक कैश के साथ जोड़ना चाहते हैं, उदाहरण के लिए archiver_get_info () देखें । और यदि डेटा पुनर्निर्माण वास्तव में धीमा है, तो आप इसे लॉकिंग फ्रेमवर्क का उपयोग करके कई बार होने से रोक सकते हैं जैसे कि variable_initialize () करता है।
ध्यान दें कि किसी एकल क्वेरी को कैशिंग करना केवल तभी समझ में आता है यदि यह एक धीमा है, क्योंकि एक कैश_गेट () भी एक डीबी क्वेरी है जब तक कि आप एक वैकल्पिक कैश बैकेंड का उपयोग नहीं करते हैं जैसे कि मेमाकैश।
और अंत में, व्यू में पहले से ही अंतर्निहित कैशिंग है और इसे आपके विचार में कॉन्फ़िगर किया जा सकता है। तो यह एक विकल्प भी हो सकता है।
db_query()
, और मूल्य से कैश करने के लिए $results->fetchAll()
और $results
वास्तव में इसे काम करने के लिए महत्वपूर्ण नहीं है।
मुझे नहीं लगता कि डीबी की परत किसी भी कैशिंग तंत्र (हालांकि मैं गलत हो सकता है) में बनाया गया है, लेकिन आप डिफ़ॉल्ट कैश एपीआई का उपयोग कर सकते हैं।
यह सिर्फ एक मूल उदाहरण है जो किसी निश्चित प्रकार के नोड प्राप्त करने के लिए क्वेरी के परिणामों को कैश करेगा:
function MYMODULE_get_nodes_by_type($type) {
// Setup a cache ID
$cid = 'MYMODULE:node_types:' . $type;
// If a cached entry exists, return it
if ($cached = cache_get($cid)) {
return $cached->data;
}
// Otherwise load the data
$data = db_query('SELECT * FROM {node} WHERE type = :type', array(':type' => $type))->fetchAll();
// And cache it
cache_set($cid, $data, 'cache', strtotime('+6 days'));
}
Drupal द्वारा प्रदान किए जाने वाले मानक cache_set / cache_get तंत्र के अलावा , यदि आप MySQL को अपने डेटाबेस के रूप में उपयोग कर रहे हैं, तो आप क्वेरी कैश को सक्षम कर सकते हैं , जो विचारों के परिणामों, या किसी अन्य डेटाबेस क्वेरी को पारदर्शी रूप से कैश कर सकते हैं। mysqltuner कैश आकार के लिए अच्छे मूल्यों का पता लगाने में सहायता कर सकता है।
बस ध्यान दें कि यदि आप डेटाबेस पर बहुत अधिक लेखन कर रहे हैं, तो कैश कैशेलेशन स्ट्रैटेजी काम करने के तरीके के कारण क्वेरी कैशिंग कम प्रभावी हो जाती है (तालिका में लिखने से सभी प्रविष्टियों को अमान्य कर दिया जाता है जो उस तालिका का चयन करें या उसमें शामिल हों)।
PostgreSQL के लिए एक कैशिंग तंत्र भी है , लेकिन मुझे इसके साथ प्रत्यक्ष अनुभव नहीं है।
मैंने हाल ही में कैश एक्ट्स मॉड्यूल की खोज की । इस मॉड्यूल के साथ, आप अपने दृश्य कैशिंग को नियम-ट्रिगर कैश में सेट कर सकते हैं और विशिष्ट विचारों और विचारों के प्रदर्शन पर कैश को अमान्य करने के लिए एक नियम बना सकते हैं।
उदाहरण के लिए, एक दृश्य के लिए कैश जो एक विशिष्ट सामग्री प्रकार के नोड्स को सूचीबद्ध करता है, जब उस सामग्री प्रकार का एक नया नोड बनाया जाता है, तो उसे खाली किया जा सकता है।