xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Кэширование данных в собственную таблицу

Опубликовано в

В друпале по умолчанию кэш разделён на несколько таблиц, это — cache, cache_block, cache_filter, cache_form, cache_menu, cache_page и cache_update. Из названий понятно для чего они предназначены. Для того, чтобы хранить данные в собственной таблице и при этом пользоваться функциями cache_set() / cache_get(), достаточно в .install файле вашего модуля реализовать соответствующим образом хук hook_schema():

/**
 * Implements hook_schema().
 */
function mymodule_schema() {
  $schema['cache_mycache'] = drupal_get_schema_unprocessed('system', 'cache');
  $schema['cache_mycache']['description'] = 'Кэш-таблица под мои данные';
  return $schema;
}
 
/**
 * Implements hook_install().
 * Только для Drupal 6
 */
function mymodule_install() {
  drupal_install_schema('mymodule');
}
 
/**
 * Implements hook_uninstall().
 * Только для Drupal 6
 */
function mymodule_uninstall() {
  drupal_uninstall_schema('mymodule');
}

Плюс, реализовать в основном файле модуля хук hook_flush_caches(), для включения механизма очистки таблицы от старых данных:

/**
 * Implements hook_flush_caches().
 */
function mymodule_flush_caches() {
  return array('cache_mycache');
}

После этого в коде можно писать:

// записываем в кэш на 1 день
cache_set('some-cid', 'some-data', 'cache_mycache', time() + 60*60*24);
 
// или записываем в кэш до первой очистки
cache_set('some-cid', 'some-data', 'cache_mycache');
 
// читаем из кэша
$cache = cache_get('some-cid', 'cache_mycache');
Написанное актуально для Drupal 6, Drupal 7
Похожие записи

Комментарии RSS

Было бы круто отдельный пост про кэширование в Друпале для нубов. Чтобы на пальцах :)

А так - спасибо!

День добрый! Пишу модуль и планирую в нем встроить свое кэширование (очень уж специфичная отдача контента будет). Посоветуйте пожалуйста как лучше хранить кэш? Как описано выше или же лучше по примеру Boost'а хранить кэшированные страницы в файлах и по hook_flush_caches чистить их?
Я придерживаюсь второго варианта, т.к. он обеспечивает минимальное количество обращений к БД. Плюс планируется разделение на два сервера, один под БД и фронтенд, второй под статику и кэшированные страницы.
Очень интересно услышать ваше мнение. Спасибо!

делайте тесты, смотрите что быстрее

Это само собой разумеется )

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании