क्या मैं सभी कैश _... टेबल को काट सकता हूं?
आपको "cache_form" तालिका को छोटा नहीं करना चाहिए, क्योंकि इसमें उन्हें सत्यापित करने के लिए Drupal से उपयोग किए गए डेटा शामिल हैं; यदि आप उस तालिका को हटाते हैं, तो वर्तमान में उपयोगकर्ता से सबमिट किया जा रहा फ़ॉर्म अमान्य हो जाएगा, और उपयोगकर्ताओं को फिर से फ़ॉर्म जमा करना होगा।
कुछ अन्य कैश टेबल हो सकते हैं जो मॉड्यूल को अजीब तरीके से कार्य करने का कारण बनाते हैं। यही कारण है कि अतिरिक्त कैश टेबल का उपयोग कर रहे मॉड्यूल (जिसका नाम आम तौर पर "कैश_" के साथ शुरू होता है) को हुक_फ्लश_कैश () को लागू करने के लिए माना जाता है ताकि ड्रुपल से साफ हो सकने वाली कैश टेबल को वापस किया जा सके, और जिसे फिर निम्न कोड के साथ बुलाया जाता है, से drupal_flush_all_caches () ।
$core = array('cache', 'cache_path', 'cache_filter', 'cache_bootstrap', 'cache_page');
$cache_tables = array_merge(module_invoke_all('flush_caches'), $core);
foreach ($cache_tables as $table) {
cache_clear_all('*', $table, TRUE);
}
drupal_flush_all_caches()
प्रदर्शन सेटिंग पेज में "Clear all caches" बटन पर क्लिक करने पर, जब आप "क्लीयर ऑल कैश" बटन पर क्लिक करते हैं, तो सिस्टम_क्लियर_कैशे_सुमिट () से कॉल किया जाता है ।
क्रोन कार्यों के दौरान, system_cron () निम्नलिखित कोड का उपयोग करके कैश को साफ़ करता है।
$core = array('cache', 'cache_path', 'cache_filter', 'cache_page', 'cache_form', 'cache_menu');
$cache_tables = array_merge(module_invoke_all('flush_caches'), $core);
foreach ($cache_tables as $table) {
cache_clear_all(NULL, $table);
}
जैसा कि cache_clear_all () का पहला तर्क है NULL
, DrupalDatabaseCache :: clear () (Drupal 7) में निष्पादित कोड निम्नलिखित है।
if (variable_get('cache_lifetime', 0)) {
// We store the time in the current user's $user->cache variable which
// will be saved into the sessions bin by _drupal_session_write(). We then
// simulate that the cache was flushed for this user by not returning
// cached data that was cached before the timestamp.
$user->cache = REQUEST_TIME;
$cache_flush = variable_get('cache_flush_' . $this->bin, 0);
if ($cache_flush == 0) {
// This is the first request to clear the cache, start a timer.
variable_set('cache_flush_' . $this->bin, REQUEST_TIME);
}
elseif (REQUEST_TIME > ($cache_flush + variable_get('cache_lifetime', 0))) {
// Clear the cache for everyone, cache_lifetime seconds have
// passed since the first request to clear the cache.
db_delete($this->bin)
->condition('expire', CACHE_PERMANENT, '<>')
->condition('expire', REQUEST_TIME, '<')
->execute();
variable_set('cache_flush_' . $this->bin, 0);
}
}
कोड केवल उन पंक्तियों को हटा देता है, जिन्हें स्थायी के रूप में चिह्नित नहीं किया गया है, और समाप्त हो गई हैं, तालिकाओं से hook_flush_caches()
, और ड्रुपल से उपयोग किए गए विभिन्न कैश तालिकाओं से, "cache_form"। "Cache_form" में बहुत अधिक पंक्तियाँ नहीं होनी चाहिए; यदि ऐसा होता है, तो आप क्रोन कार्यों के दो लगातार निष्पादन के बीच पारित समय को कम कर सकते हैं, या कस्टम मॉड्यूल से निम्न कोड निष्पादित कर सकते हैं।
cache_clear_all(NULL, 'cache_form');
एक विकल्प मैन्युअल रूप से कैश को हटा दिया जाता है, जिससे डेवेल मॉड्यूल का उपयोग किया जाता है, और मेनू लिंक यह दिखाता है।