В друпале по умолчанию кэш разделён на несколько таблиц, это — 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;
}
<!--break-->
/**
* 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
Комментарии
Было бы круто отдельный пост про кэширование в Друпале для нубов. Чтобы на пальцах :)
А так - спасибо!
http://www.prodrupal.ru/ru/node/8
День добрый! Пишу модуль и планирую в нем встроить свое кэширование (очень уж специфичная отдача контента будет). Посоветуйте пожалуйста как лучше хранить кэш? Как описано выше или же лучше по примеру Boost'а хранить кэшированные страницы в файлах и по hook_flush_caches чистить их?
Я придерживаюсь второго варианта, т.к. он обеспечивает минимальное количество обращений к БД. Плюс планируется разделение на два сервера, один под БД и фронтенд, второй под статику и кэшированные страницы.
Очень интересно услышать ваше мнение. Спасибо!
делайте тесты, смотрите что быстрее
Это само собой разумеется )
Добавить комментарий