ক্যাশে সাফ করার কি উপায় আছে?


16

ভারী ক্যাশে সহ একটি বড় প্রতিষ্ঠানের ওয়েবসাইটের জন্য আমি যত তাড়াতাড়ি সম্ভব ক্যাশে তৈরি করতে চাই, যাতে কোনও ব্যবহারকারী ক্যাশে প্রজন্মের কাছে না আসতে পারে ...

আমি কয়েক মিনিট ফাংশন সম্পাদন করে এবং সমালোচনামূলক পৃষ্ঠাগুলির অনুরোধ করে একটি ক্রোন সেট করে রেখেছি, তবে আমি যা খুঁজছি তা কেবল ক্যাশে কখন সাফ হয়ে গেছে তা জানার একটি উপায় , পছন্দমত একটি হুক, তাই আমি এটি চালু করতে পারি উৎপাদিত-ফাংশন।

কোন ধারণা ?


আপনি কী সম্পাদন করতে চাইছেন তার উপর নির্ভর করে ক্যাশে সাফ হওয়ার পরে পৃষ্ঠাটির নীচে ফাইয়ের উত্তর হ'ল কোড ফায়ার করার একটি দুর্দান্ত সমাধান।
লেস্টার পিয়াবডি

উত্তর:


7

ড্রুপাল x.x এ নেই তবে পর্যাপ্ত লোকেরা এটির অনুরোধ করার পরে এটি একটি মূল হুক হিসাবে যুক্ত করা হয়েছিল, দ্রুপাল ৮.x এ হুক_বিল্ড । X.x এ আপনার সমস্যা সমাধানের আরও ভাল উপায় হতে পারে - আপনি ক্রোন ক্যাশে সাফ করার পরে ঠিক কিছুটা ক্যাশে ওয়ার্মিং কার্যকারিতা শুরু করার চেষ্টা করছেন, সঠিক? এর কাছে যাওয়ার আরও একটি উপায় হ'ল এলিয়াসিয়া ক্রোন ব্যবহার করা যা ক্রোনটি কীভাবে পরিচালনা করে তার ক্ষেত্রে বেশ কয়েকটি উল্লেখযোগ্য উন্নতি রয়েছে তবে দুটি আপনার ব্যবহারের ক্ষেত্রে প্রাসঙ্গিক হতে পারে:

এলিসিয়া ক্রোন ড্রুপাল স্ট্যান্ডার্ড ক্রোন প্রসারিত করে, প্রতিটি কাজের উপর সূক্ষ্ম শস্য নিয়ন্ত্রণ এবং আপনার সাইটে কাস্টম ক্রোন জব যোগ করার বিভিন্ন উপায়ে অনুমতি দেয়।

  • প্রতিটি ক্রোন টাস্কের সময় ও ফ্রিকোয়েন্সি নির্ধারণ করুন (আপনি প্রতিদিন একটি নির্দিষ্ট সময়ে প্রতিদিন কিছু কাজ চালাতে পারেন, অন্যান্য কেবলমাত্র মাসিক এবং আরও কিছু ...)। প্রতিটি কাজের জন্য আপনি কিছু ঘন ঘন ব্যবহৃত বিকল্পগুলির মধ্যে ("একবারে একবার", "মাসে একবার" ...) বেছে নিতে পারেন, বা সঠিক সময় নির্ধারণের জন্য একটি শক্তিশালী "লিনাক্স ক্রন্টব" -র মতো সিনট্যাক্স ব্যবহার করতে পারেন। এমনকি সাইট কনফিগারেশনের গতি বাড়ানোর জন্য আপনার ঘন ঘন ব্যবহৃত বিকল্পগুলিও সংজ্ঞায়িত করতে পারেন। ...
  • কার্য সম্পাদনের অগ্রাধিকার / ক্রম পরিবর্তন করুন। ...

আপনার ক্রোন কীভাবে বাসি ক্যাশে ইস্যু সমাধান করতে সহায়তা করে তা নিয়ন্ত্রণ করার জন্য আপনি এই মডিউলটি ব্যবহার করতে পারেন। বিশেষত, আপনি ক্রোনকে পুনর্নির্মাণের ফাংশনগুলিতে একটি হুক যোগ করতে পারেন এবং তারপরে এলিসিয়া ক্রোন ব্যবহার করে ক্যাশে ক্লিয়ারিং অপারেশনের পরে অবিলম্বে চালানোর জন্য এই ক্রিয়াকলাপগুলি সেট করে।

মনে হচ্ছে আপনার ক্রোন ক্রম নিয়ে চলতে সমস্যা হতে পারে যা প্রায়শই ক্যাশে পুনরায় বিনোদন করে ated যদি এটি হয় তবে আপনার বাকি ক্রোন ক্রিয়াকলাপের চেয়ে আলাদা হারে চলার জন্য আপনি ইলিশিয়া ক্রোনটিতে নির্দিষ্ট ক্যাশে ক্লিয়ারিং অপারেশন সেট করতে পারেন, উদাহরণস্বরূপ সন্ধান সূচীকরণ প্রতি 5 মিনিটে আপডেট হবে তবে সম্পূর্ণ ক্যাশে ক্লিয়ারটি কেবল প্রতিটি চলবে would 6 ঘন্টা, ইত্যাদি

ফাইন টিউন ক্রোন ক্যাশে ম্যানেজমেন্ট: ড্রুপাল ক্রোন প্রতিটি ক্রোন রান চলক ক্যাশে অবৈধ করবে এবং আপনার যদি প্রায়শই ডাকা টাস্ক থাকে তবে এটি দুর্দান্ত পারফরম্যান্স সমস্যা। ইলিশিয়া ক্রোন ক্যাশে পরিচালনা অনুকূলিত করে, এবং ক্যাশে অকার্যকর করার দরকার নেই।


আচ্ছা এটি একটি সত্যিকারের বোমার বিষয়। তাড়াতাড়ি ডি 8! প্রকৃতপক্ষে, আমি আগেই বলেছি, ইলিয়া_ক্রোন সহ একটি ক্রোন, প্রতি মিনিটে ছুটে চলেছে, আমার যা প্রয়োজন তা উষ্ণ করছে। তবে যেহেতু আমার সাইটে> ১০,০০০ / ভিজিট / ঘন্টা থাকবে, আমি নিশ্চিত যে এসবিডি খালি ক্যাশে পড়বে ... যাইহোক, আমি এখন জানি যে এটি একটি ডি 7 সীমাবদ্ধতা!
গ্রেগরি কাপুস্টিন

12

এটি করার hook_flush_cachesউপায়টি এর সাথে মিলিয়ে ব্যবহার করা register_shutdown_function। উদাহরণ কোড:

/**
 * Implements hook_flush_caches().
 */
function mymodule_flush_caches() {
   // After caches are cleared we will run mymodule_cache_rebuild()
   register_shutdown_function('mymodule_cache_rebuild');

   // We don't want to add any custom cache-tables, so just return an empty array
   return array();
}

/**
 * Rebuild expensive cache items that need to be rebuilt immediately.
 */
function mymodule_cache_rebuild() {
  // Do the cache rebuild work here
}

ব্যবহারের register_shutdown_functionঅর্থ হ'ল ক্যাশে সাফ হওয়ার পরে আমাদের ক্যাশে-পুনর্নির্মাণ ফাংশনটি কল করা হবে । আমরা এমনভাবে গালি দিচ্ছি hook_flush_cachesযে এটি কখনই ব্যবহারের ইচ্ছা ছিল না, তবে এটি আপনার প্রয়োজন মতো করা উচিত।


আমি এই সমাধানটি সত্যিই পছন্দ করি। এটি নিজে ব্যবহার করার আগে, আমি register_shutdown_function()দ্রুপাল ব্যবহার করে যে কোনও জ্ঞাত সমস্যা / বিবাদগুলি অনুসন্ধান করেছি এবং ড্রপাল কোরের drupal_register_shutdown_function () জুড়ে এসেছি : "রেজিস্টার_শুটডাউন_ফংশন () এর জন্য র‌্যাপার যা" অজানাতে স্ট্যাক ফ্রেম ছাড়াই ব্যতিক্রম নিক্ষেপ "এড়ানোর জন্য ছোঁড়া ব্যতিক্রম ধরা পড়ে I আমি এটির জন্য কেবলমাত্র ড্রুপাল কোর ফাংশন ব্যবহার করছি কিনা তা আমাকে আরও ভাল মনে করে তা জেনে রাখুনabusing hook_flush_caches
রানউইথসিসারস

11

না, নেই। আসলে তা না. কমপক্ষে 6 বা 7 এ নয় Ass

আপনি যদি তাকান drupal_flush_all_caches()আপনি এটি অনুরোধ দেখতে পাবেন hook_flush_caches()। এই হুক বোঝানো হয়:

"ক্যাশে টেবিলের তালিকায় ক্যাশে টেবিলের নাম যুক্ত করুন যা পারফরম্যান্স পৃষ্ঠায় সাফ করুন বাটনটি যখনই ড্রুপাল_ফ্লুশ_ল_ক্যাচসকে অনুরোধ করা হবে তখন সাফ হয়ে যাবে" "

আপনার মডিউলের হুকটি সর্বশেষে যেতে এবং সেখানে কোড লিখতে প্ররোচিত করা হবে। তবে আবার দেখা যাক drupal_flush_all_caches()। আসল মুছে ফেলা এমন হয়:

  $cache_tables = array_merge(module_invoke_all('flush_caches'), $core);
  foreach ($cache_tables as $table) {
    cache_clear_all('*', $table, TRUE);
  }

এর অর্থ হ'ল যে কোনও কিছু সত্যই পরিষ্কার হয়ে যাওয়ার আগে সমস্ত হুকগুলি বরখাস্ত করা হয় । শুধুমাত্র এক ফাংশন, প্রকৃত মুছে ফেলার বলা হয় _system_update_bootstrap_status(), কিন্তু এটি কল শুধুমাত্র hook_boot, hook_exit, hook_watchdogএবং hook_language_init- আঙ্গুলসমূহ আপনি শুধুমাত্র বাস্তবায়ন ক্যাশে-স্পষ্ট নির্ভর কার্যকারিতা প্রদান করতে চাই না।


দাম্মিট, এই সমস্ত লিঙ্কগুলি যুক্ত করতে আমার অনেক বেশি সময় লেগেছিল;) এখনই এটি ছেড়ে দেবে কারণ আমি নিজেকে মুছে ফেলতে বাধ্য করতে পারি না, কেন এটি করা যায় না তা বোঝাতে এত বেশি সময় ব্যয় করার পরে ।
Mołot

3
এটি ছেড়ে দিন, এটি একটি ভাল উত্তর।
এমপিডোনাদিও

হ্যাঁ এটি ছেড়ে দিন, আমি সমস্ত ভাল উত্তর যাচাই করতে পারি না তবে আমি এটি শেষ করে দিয়েছি :)
গ্রেগরি কাপাস্টিন

8

ব্রড স্ট্রোক এখানে:

প্রি-ডি 8-তে কোনও হুক আউট নেই তবে আপনি স্ট্যান্ডার্ডটির উপর ভিত্তি করে আপনার নিজের ডাটাবেস ব্যাকএন্ড DrupalDatabaseCacheলিখতে পারেন এবং তারপরে আপনার clear()ফাংশনে কোনও বা সমস্ত প্রকার যুক্তি লিখতে পারেন । একটি তাত্ক্ষণিক দৃষ্টিভঙ্গি এটি ডি 7-তে যুক্তিসঙ্গতভাবে সোজা হতে পরামর্শ দেবে (কেবল আপনার কাস্টম নামটিতে ক্লাসটি অনুলিপি করুন এবং এটি module_invoke_all()যথাযথভাবে নিক্ষেপ করে ইত্যাদি পরিবর্তন করুন ) এবং ক্যাশে - ব্যাকপোর্ট মডিউলটি এমনকি ডি 6-এও কাজ করবে। তারপরে আপনি যে কোনও ক্যাশে বিনকে পরিষ্কার করতে চান তা চিহ্নিত করুন এবং আপনার পথে চলতে হবে।


3
এটি সম্ভবত সেরা সমাধান, কেবলমাত্র 'সমস্যা' হ'ল যদি আপনার একাধিক ক্যাশে বিন (মেমক্যাস, রেডিস ইত্যাদি) থাকে তবে আপনাকে বেশ কয়েকটি ক্যাশে ক্লাস প্রসারিত করতে হবে। এখনও এটি মূল্যবান
ক্লাইভ

মেমক্যাচড, এপিসি বা অন্যান্য নন-ডিবি সমাধানে ক্যাশে নিয়ে কাজ করবে না, তাই না?
Mołot

আমি রেডিস ব্যবহার করি, নিশ্চিত না যে এটি কাজ করবে।
গ্রেগরি কাপুস্টিন

আপনি যদি drupal.org/project/redis ব্যবহার করে থাকেন তবে আপনার কেবলমাত্র কাস্টম মডিউলে সরবরাহ করা ক্লাসগুলি ইত্যাদি অনুলিপি করতে বা পরিবর্তন করতে পারবেন এবং তার পরিবর্তে সেগুলি ব্যবহার করুন। যদিও, আপনি প্যানথিয়ন প্ল্যাটফর্মের লাইনে এমন কিছু ব্যবহার করছেন যেখানে তারা রেডিসের জন্য সমস্ত ভারী উত্তোলন সরবরাহ করে, তবে হ্যাঁ, আপনাকে এগুলি সম্পর্কে তাদের সাথে সমন্বয় করা দরকার।
জিমাজাম্মা

3

তোমার জন্য উৎস তাকান drupal_flush_all_caches()এবং clear_cache_all(), আপনি যে কোন আঙ্গুলসমূহ পোস্ট ক্লিয়ারিং, যা একটি চমত্কার বাগ অকর্মা হয় প্রার্থনা করছে দেখতে হবে।

গ্যারান্টি দেওয়া খুব কঠিন যে কোনও ব্যবহারকারীর কখনও কিছু ক্যাশে এন্ট্রি তৈরি হওয়ার জন্য অপেক্ষা করতে হবে না, তাই আমি যথাসম্ভব পুরো ক্যাশে ক্লিয়ারগুলি এড়ানোর চেষ্টা করি।

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

আমার কাছে এমন একটি ড্রশ স্ক্রিপ্ট রয়েছে যা drupal_http_request()আমার সমস্ত ইউআরএল (কেবল গুরুত্বপূর্ণগুলি নয়) যাতে একটি করে যা যাতে সবকিছু ক্যাশে যায়। এটি কীভাবে করা হয় তা সাইটের পরিবর্তিত হয়। কখনও কখনও আমি কেবল প্রকাশিত নোডগুলি ইএফকিউ করতে পারি এবং ইউআরএলগুলি সেভাবে তৈরি করতে পারি। অন্য সময়, আপনি আপনার URL টি পেতে এক্সএমএল সাইটম্যাপ টেবিলগুলি জিজ্ঞাসা করতে পারেন। তারপরে আমি আমার সিস্টেমে ক্রোন থেকে যতবার প্রয়োজন ততবার কল করি।


1

কয়েকটি বিকল্পের:
https://www.drupal.org/project/cache_graceful আপনি যা চান ঠিক তেমন হতে পারে।

https://www.drupal.org/project/apdqc এর 2 টি হুক রয়েছে যা ক্যাশে ক্লিয়ারে আগুন লাগলে আপনি পরিষ্কারকে পরিবর্তন করতে পারবেন drupal_alter('apdqc_cache_clear', $cid, $wildcard, $this->bin, $caller);এবং আপনাকে সাফের প্রতিক্রিয়া জানাতে পারবেন module_invoke_all('apdqc_cache_clear', $cid, $wildcard, $this->bin, $caller);। এপিডিকিউসি সঠিকভাবে কাজ করে আপনার সেটিংস.এইচপিপি $conf['apdqc_call_hook_on_clear'] = TRUE;ফাইলে সেট করুন এবং তারপরে যখনই ক্যাশে ক্লিয়ার হয়ে যায় তখন হুকগুলি ডাকা উচিত।


1

এটি সবার জন্য উপযুক্ত নাও হতে পারে এবং ওপি-র জন্য দ্রুত পর্যাপ্ত নাও হতে পারে - কারণ এটি কেবলমাত্র পরবর্তী পৃষ্ঠার সূচনাতে ট্রিগার করা হয়েছে। যাইহোক, এটি "সংক্ষিপ্ত সমস্ত কিছু" পরে সময় সংবেদনশীল ছিল না তার ঠিক পরে ট্রিগার কোডটি আমাকে সহায়তা করেছিল।

স্পষ্টতই HOOKআপনার নিজের মডিউল নামটি প্রতিস্থাপন করা দরকার।

/**
 * Implements hook_init().
 */
function HOOK_init(){
  // if there is no cache_not_empty defined, define it 
  // and then trigger our cache cleared code
  if ( !cache_get('HOOK_cache_not_empty') ) {
    cache_set('HOOK_cache_not_empty', TRUE);
    foreach (module_implements('cache_cleared') as $module) {
      module_invoke($module, 'cache_cleared');
    }
  }
}

/**
 * Implements hook_cache_cleared().
 */
function HOOK_cache_cleared(){
  // do what you need here, in which ever module.
}

যদি আপনার নির্দিষ্ট টার্গেটের দরকার হয় তবে আপনাকে সমর্থন করতে উপরেরগুলিকে সংশোধন করা যেতে পারে, যতক্ষণ না আপনার ক্যাশে সাফ হওয়ার স্থানে পুরো বিন খালি হয়ে যায়।

hook_initকেবল অ-ক্যাশেড পৃষ্ঠাগুলির জন্যই কার্যকর করা হয়। যদিও পুরো ক্যাশে ক্লিয়ারটির অর্থ কোনও ক্যাশেড পৃষ্ঠাগুলি হওয়া উচিত নয়, এটি কোনও সমস্যার কারণ হবে না। তবে, বার্নিশের মতো বাহ্যিক ক্যাচিং সিস্টেমগুলি এই ট্রিগারটির পথে আসবে এবং এর অর্থ হ'ল কেবলমাত্র তখনই ঘটবে যখন পরবর্তী যথাযথ অনুরোধটি দ্রুপলের কাছে ফিরে আসে।

আপনার ক্যাচিং সিস্টেমের উপর নির্ভর করে - ঠিক যখন cache_setসমস্ত সমসাময়িক ব্যবহারকারীদের কাছে এটি উপলব্ধ হয় - তার উপর নির্ভর করে এই হুকটি একযোগে একাধিকবার ট্রিগার হতে পারে, বিশেষত আপনার যদি প্রচুর সংখ্যক ব্যবহারকারী থাকে।


0

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

এটি ক্রোন বা অন্য কোথাও কোনও ক্যাশে ক্লিয়ারকে আঘাত করবে না - কেবল মেনু লিঙ্কে।

/**
 * Implements hook_menu_alter().
 */
function mymodule_menu_alter(&$items) {
  if (isset($items['admin_menu/flush-cache'])) {
    $items['admin_menu/flush-cache']['page callback'] =
      "_mymodule_custom_flush_cache";
  }
}

/**
 * Hijacks the "flush all caches" button in menu
 */
function _mymodule_custom_flush_cache() {
  /**
   * Clear varnish, or other logic here
   */
  admin_menu_flush_cache(); //Run the normal cache clearing stuff
}

থেক্স ট্র্যাভিস, তবে আমি এমন কোনও উপায় খুঁজছি যা কোনও স্পষ্ট ক্যাশে হুক করে না, কেবল একজনই ব্যবহারকারী দ্বারা স্বেচ্ছায় ট্রিগার হয়েছিল।
গ্রেগরি কাপুস্টিন

0

আপনি https://www.drupal.org/project/recacher চেষ্টা করতে পছন্দ করতে পারেন - এটি মেয়াদোত্তীর্ণ পৃষ্ঠাগুলি সনাক্ত করতে ক্যাশে সমাপ্তির মডিউল ব্যবহার করে এবং কেবলমাত্র সেরা HTTPRL ব্যবহার করে কেবল সেই পৃষ্ঠাগুলিকে পুনরায় ক্যাশে করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.