সাফ ক্যাশে ক্যাশে টেবিলগুলি সাফ করে না?


11

আমি সাফ ক্যাশে ক্রিয়াটি পুরোপুরি বুঝতে পারি না। আমি কেবল পরিষ্কার ক্যাশে ক্লিক করেছি এতে সমস্ত ক্যাশে সাফ করুন : অ্যাডমিন / কনফিগার / ডেভেলপমেন্ট / পারফরম্যান্স, তারপরে আমি সমস্ত ক্যাশে _... টেবিলগুলি পরীক্ষা করতে ডাটাবেসে যাই এবং আমি দেখতে পাই যে সেগুলির কোনওটিই শূন্য নয়।

এটা কি স্বাভাবিক?
আমি কি সমস্ত ক্যাশে __. টেবিলগুলি কেটে ফেলতে পারি?

আসলে আমার কেবল ক্যাশে_ফর্মটি সাফ করা দরকার। আমি কি এই টেবিলটি কেটে ফেলতে পারি?

উত্তর:


13

আমি কি সমস্ত ক্যাশে __. টেবিলগুলি কেটে ফেলতে পারি?

আপনার "ক্যাশে_ফর্ম" টেবিলটি কেটে ফেলা উচিত নয়, কারণ এতে ড্রুপাল থেকে তাদের বৈধতা দেওয়ার জন্য ব্যবহৃত ডেটা রয়েছে; আপনি যদি এই টেবিলটি মুছুন, ব্যবহারকারী থেকে বর্তমানে জমা দেওয়া ফর্মটি বাতিল হয়ে যাবে এবং ব্যবহারকারীদের আবার ফর্মটি জমা দিতে হবে।

কিছু অন্যান্য ক্যাশে টেবিল থাকতে পারে যা মডিউলটিকে অদ্ভুতভাবে আচরণ করার কারণ ঘটায়। এই কারণেই মডিউলগুলি অতিরিক্ত ক্যাশে টেবিলগুলি ব্যবহার করছে (যার নাম সাধারণত "ক্যাশে_" দিয়ে শুরু হয়) হ'ল_ফ্লুশ_ক্যাচি () কে দ্রুপাল থেকে সাফ করা যায় এমন ক্যাশে টেবিলগুলি ফিরিয়ে আনার জন্য প্রয়োগ করা হবে, এবং যা নিম্নলিখিত কোড দিয়ে ডাকা হয়, থেকে 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()system_clear_cache_submit () থেকে ডেকে আনা ফাংশনটি , আপনি যখন পারফরম্যান্স সেটিংস পৃষ্ঠায় "সমস্ত ক্যাশে সাফ করুন" বোতামটি ক্লিক করেন তখন জমা দেওয়া ফর্ম হ্যান্ডলার বলা হয়।

ক্রোন কার্যের সময়, সিস্টেম_ক্রোন () নিম্নলিখিত কোড ব্যবহার করে ক্যাশে সাফ করে।

  $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 :: স্পষ্ট () (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_clear_all(NULL, 'cache_form');

একটি বিকল্প হ'ল দেভুল মডিউলটি এবং মেনু লিঙ্কটি এটির ব্যবহার করে ম্যানুয়ালি ক্যাশে মুছে ফেলা হবে।

স্ক্রিনশট


আমার সমস্যাটি হ'ল ক্যাশে_ফর্ম টেবিলটির একটি ওয়েবসাইটের আকার M৩ মেগাবাইট যা জাস্ট 2 দিন ধরে নির্মিত হয়েছে। আমার ভয় হ'ল এই টেবিলটি নিয়ন্ত্রণ ছাড়াই বৃদ্ধি পাবে ...
শেফেলোন

1
যদি আপনার ক্রোন সেট আপ থাকে, তবে প্রতিবার যখন চলবে তখন সমস্ত ক্যাশে (ক্যাশে_ফর্ম সহ) থেকে মেয়াদোত্তীর্ণ এন্ট্রিগুলি সাফ করা উচিত।
এমপিডোনাদিও

1
@ শেফেলোন যেমন কিমলালুনো ব্যাখ্যা করেছেন, আপনার ক্রোনটি সঠিকভাবে সেট আপ করা থাকলে এই টেবিলটি পর্যায়ক্রমে সাফ হওয়া উচিত।
অপেশাদার বারিস্তা

2
@ কিয়ামলালুনো, এই উত্তরটি পড়া খুব তথ্যমূলক এবং ব্যবহারিক, ক্যাশে সম্পর্কিত কাঁটার জন্য একটি সহজ দ্রুত রেফারেন্স। 1+
অপেশাদার বারিস্তা

আপনি যেমন বলেছিলেন আমি ক্রোন চালাচ্ছি এবং টেবিলটি সাফ হয়ে গেছে। ধন্যবাদ।
শেফেলোন

6

আপনি যদি ইউআই এর মাধ্যমে ক্যাশে সাফ করছেন, তবে পৃষ্ঠাটি পুনরায় লোড হওয়ার সাথে সাথেই ক্যাশে আবার পূরণ শুরু হবে। অন্য কথায়, সেই পৃষ্ঠাটিকে রিফ্রেশ করার কাজটি দ্রুপালকে আবার জিনিসগুলি ক্যাশে করা শুরু করে (বিশেষত cache_menu)।

আপনি DELETE FROM cacheবিভিন্ন টেবিলগুলিতে নিরাপদে রাখতে পারেন।

আমি আরও নিশ্চিত যে এটি করার drush cc allফলে সম্পূর্ণ খালি ক্যাশে সারণীও আসবে।


ধন্যবাদ, কেবল ক্যাশে_ফর্মটি পরিষ্কার করার দরকার আছে তা নিশ্চিত হওয়ার জন্য Thanks আমি কি এই টেবিলটি কেটে ফেলতে পারি?
শেফেলোন

4
আপনি যদি api.drupal.org/api/drupal/includes%21common.inc/function/… এর কোডটি পড়েন তবে আপনি দেখতে পাবেন যে ক্যাশে_ফর্মটি ক্লিয়ার হয় না এবং কেন। আপনি যদি ইতিবাচক হন যে এটি ঠিক আছে, তবে আপনার এটি করা উচিত। ক্যাশে_ফর্ম সহ কিছু historicতিহাসিক বাগ রয়েছে যা এন্ট্রিগুলির মেয়াদ শেষ না করে এবং বর্ধমান ডাব্লু / ও সীমাবদ্ধ রয়েছে।
এমপিডোনাডিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.