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