Önbelleği Temizle işlemini tam olarak anlamıyorum. Sadece önbelleği temizle'yi tıklatıyorum.
Bu normal mi?
Tüm önbellek _... tablolarını kısaltabilir miyim?
Aslında sadece cache_form'u temizlemem gerekiyor. Bu tabloyu kısaltabilir miyim?
Önbelleği Temizle işlemini tam olarak anlamıyorum. Sadece önbelleği temizle'yi tıklatıyorum.
Bu normal mi?
Tüm önbellek _... tablolarını kısaltabilir miyim?
Aslında sadece cache_form'u temizlemem gerekiyor. Bu tabloyu kısaltabilir miyim?
Yanıtlar:
Tüm önbellek _... tablolarını kısaltabilir miyim?
Onları doğrulamak için Drupal'dan kullanılan verileri içerdiğinden, "cache_form" tablosunu kısaltmamalısınız; bu tabloyu silerseniz, şu anda kullanıcıdan gönderilen form geçersiz olur ve kullanıcıların formu tekrar göndermeleri gerekir.
Bir modülün garip davranmasına neden olan başka önbellek tabloları olabilir. Bu nedenle (önbellek genellikle "cache_" ile başlayan) ekstra önbellek tabloları kullanan modüllerin Drupal'dan silinebilen ve daha sonra aşağıdaki kodla çağrılan önbellek tablolarını döndürmek için hook_flush_cache () kullanması gerekir. dan 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()
performans ayarları sayfasındaki "Tüm önbellekleri temizle" düğmesini tıklattığınızda çağrılan gönderim formu işleyicisi system_clear_cache_submit () ' den çağrılan işlevdir .
Cron görevleri sırasında system_cron () yöntemi aşağıdaki kodu kullanarak önbelleği temizler.
$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 () işlevinin ilk bağımsız değişkeni olduğu gibi NULL
, DrupalDatabaseCache :: clear () (Drupal 7) içinde yürütülen kod aşağıdaki gibidir.
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);
}
}
Kod, yalnızca kalıcı olarak işaretlenmemiş ve süresi hook_flush_caches()
bitmiş satırları, döndürülen tablolardan ve Drupal tarafından kullanılan ve "cache_form" dahil olmak üzere çeşitli önbellek tablolarından kaldırır. "Cache_form" da çok fazla satır olmamalıdır; bu olursa, cron görevlerinin iki ardışık yürütmesi arasında geçen süreyi azaltabilir veya özel bir modülden aşağıdaki kodu yürütebilirsiniz.
cache_clear_all(NULL, 'cache_form');
Alternatif, Devel modülünü ve gösterdiği menü bağlantısını kullanarak önbelleğin manuel olarak temizlenmesine neden olmaktır .
Kullanıcı arabirimi üzerinden önbellek temizliyorsanız, sayfa yeniden yüklenir yüklenmez önbellek tekrar dolmaya başlar. Başka bir deyişle, bu sayfayı yenileme işlemi Drupal'ın bir şeyleri yeniden önbelleğe almasına (özellikle cache_menu
) neden olur .
Şunları yapabilirsiniz DELETE FROM cache
güvenle çeşitli tablolarda.
Ben de drush cc all
tamamen boş önbellek tabloları ile sonuçlanacağından eminim .