स्पष्ट कैश कैश तालिकाओं को साफ़ नहीं करता है?


11

मैं कैश कैश एक्शन को पूरी तरह से नहीं समझता। मैं केवल स्पष्ट कैश में क्लिक करता हूं : सभी कैश को साफ करें : व्यवस्थापक / कॉन्फ़िगरेशन / विकास / प्रदर्शन, फिर मैं सभी कैश _... तालिकाओं की जांच करने के लिए डेटाबेस में जाता हूं और मुझे पता चलता है कि उनमें से कोई भी खाली नहीं है।

क्या यह सामान्य है?
क्या मैं सभी कैश _... टेबल को काट सकता हूं?

वास्तव में मुझे सिर्फ cache_form साफ़ करना होगा। क्या मैं इस तालिका को काट सकता हूं?

जवाबों:


13

क्या मैं सभी कैश _... टेबल को काट सकता हूं?

आपको "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');

एक विकल्प मैन्युअल रूप से कैश को हटा दिया जाता है, जिससे डेवेल मॉड्यूल का उपयोग किया जाता है, और मेनू लिंक यह दिखाता है।

स्क्रीनशॉट


मेरी समस्या यह है कि कैश_फॉर्म टेबल का आकार वेबसाइट के लिए 63Mb है जो जेस्ट 2 दिनों के लिए उत्पादन में है। मेरा डर है कि यह तालिका नियंत्रण के बिना बढ़ रही होगी ...
शेफेलोन

1
यदि आपके पास क्रोन सेट अप है, तो हर बार चलने वाले कैश से (कैश_फॉर्म सहित) सभी समयसीमा समाप्त हो जानी चाहिए।
mpdonadio

1
@chefnelone जैसा कि kiamlaluno ने समझाया, यदि आपके पास अपना क्रोन ठीक से सेट है, तो यह तालिका समय-समय पर स्पष्ट होनी चाहिए।
शौकिया बरिस्ता

2
@kiamlaluno, इस उत्तर को पढ़ना बहुत जानकारीपूर्ण और व्यावहारिक है, कैश से संबंधित कांटों के लिए एक त्वरित त्वरित संदर्भ। 1+
शौकिया बरिस्ता

जैसा कि आपने कहा कि मुझे क्रोन चल रहा है और मेज साफ हो गई। धन्यवाद।
शेफेलोन

6

यदि आप UI के माध्यम से कैश क्लियर कर रहे हैं, तो जैसे ही पेज फिर से लोड होगा, तो कैश फिर से भरना शुरू हो जाएगा। दूसरे शब्दों में, उस पृष्ठ को ताज़ा करने का कार्य ड्रुपल को चीजों को फिर से (विशेष रूप से cache_menu) कैश करने के लिए शुरू करता है ।

आप DELETE FROM cacheसुरक्षित रूप से विभिन्न तालिकाओं पर कर सकते हैं।

मुझे भी पूरा यकीन है कि drush cc allवसीयत करने से रिजल्ट पूरी तरह से खाली कैश टेबल में आ जाएगा।


धन्यवाद, बस यह सुनिश्चित करने के लिए कि मुझे अभी cache_form साफ़ करना है। क्या मैं इस तालिका को काट सकता हूं?
शेफेलोन

4
यदि आप api.drupal.org/api/drupal/includes%21common.inc/function/… के लिए कोड पढ़ते हैं, तो आप देखेंगे कि cache_form साफ़ नहीं होता है और क्यों। यदि आप सकारात्मक हैं कि यह ठीक है, तो आपको ऐसा करने में सक्षम होना चाहिए। कैश_फॉर्म के साथ कुछ ऐतिहासिक बग हैं जो प्रविष्टियों को समाप्त नहीं कर रहे हैं, और डब्ल्यू / ओ बाध्य हो रहे हैं।
mpdonadio
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.