Drupal → Способы очистки кэша с помощью функции cache_clear_all()

10.10.2010

Примеры работы функции cache_clear_all().

Для очистки кэша страниц и блоков с истёкшим временем хранения, нужно вызвать ф-ю без аргументов:

cache_clear_all();

это равносильно:

cache_clear_all(NULL, 'cache_block');
cache_clear_all(NULL, 'cache_page');

null говорит о том, что нужно удалять данные только с истёкшим сроком.

Таким образом, чтобы удалить все устаревшие данные из указанной таблицы, нужно вторым аргументом передать название таблицы:

cache_clear_all(NULL, 'cache_TABLE');

Удалить все данные из указанной таблицы, даже тех, срок которых не истёк:

cache_clear_all('*', 'cache_TABLE', TRUE);

Удалить данные, ID которых имеет определённый префикс, даже тех, срок которых ещё не истёк:

cache_clear_all('ID_PREFIX', 'cache_TABLE', TRUE);

Например можно удалить кэш страниц таксономии:

cache_clear_all('http://example.com/taxonomy/term/', 'cache_page', TRUE);

Чтобы удалить из кэша данные по ID, нужно первым аргументом передать идентификатор, а вторым название таблицы:

cache_clear_all('ID', 'cache_TABLE');

Например можно удалить кэш определённой страницы:

cache_clear_all('http://example.com/node/123', 'cache_page');

Очистить все кэши можно с помощью функции:

drupal_flush_all_caches();

По материалам An overview of Drupal's cache_clear_all uses.

Написанное актуально для
Drupal 6.x, Drupal 7.x
Похожие записи

Комментарии

Игорь
12.02.2012, 20:15

Здравствуйте!
Что то нет комментариев на этой странице... надо бы исправить... шутка... а серьёзно, у меня вопрос:
Я так понял, что cron.php не очищает кеш?
То есть можно например в function hook_cron() { , своего модуля, добавить функцию - cache_clear_all()?
Или можно сделать страницу с php кодом и там вызывать эту функцию очистки, если её нужно вызывать в отличное время от вызова крона....
Я правильно мыслю... Поправьте меня пожалуйста.
У меня просто на сайте крон включен каждый час. А кеш буста не очищается. хотя для страниц html время жизни - 1 час. Помогает только в ручную под админом вызвать - очистить все кеши.

Игорь
12.02.2012, 20:51

И правильно и не правильно:

cache_clear_all(NULL, $table);

он не очищает все таблицы, а только

$core = array('cache', 'cache_path', 'cache_filter', 'cache_page', 'cache_form', 'cache_menu');

Всё равно нужно вызвать - cache_clear_all(); - что все таблицы кеша очистить!
Сейчас гляну что boost очищает?

Игорь
28.08.2012, 14:06

Наконец то с boost разобрался!
function boost_cron() - не срабатывает, если вызывать крон под анонимом с ключом. isset($_boost['base_dir']) - нет директории. Нашел в модуле код как установить директорию и добавил в mymodule_cron

  global $_boost, $base_path, $base_root;
  if (empty($_boost['base_dir'])) {
    $url = $base_root . request_uri();
    $parts = parse_url($url);
    $_boost['base_dir'] = boost_get_normal_cache_dir() . '/' . $parts['host'] . $base_path;
	boost_cron();
	# Implements hook_flush_caches(). Deletes all static files. Или Удалить все файлы
	# $_boost['cron'] = FALSE; # отработает функция: boost_flush_caches();   
  } 

Это для 7-ки. Думаю что для 6-ки что то подобное. Может кому пригодится.

Ксения
11.10.2012, 12:38

Очистить все кэши можно с помощью функции:
drupal_flush_all_caches();

Дописываю эту функцию в cron.php (копирую на сайт, чищу кеш), запускаю крон - размер таблиц кэша остается прежним =( Что делаю не так?

Ссылка на оригинальную статью не работает

Артур
23.08.2014, 09:09

Можно ли обновить в кеше boost отдельные страницы. Можно конечно открывать каждую из этих страниц, редактировать, сохранять. Но может есть вариант проще?

Добавить комментарий