Memcached — это программное обеспечение, позволяющее хранить данные в оперативной памяти в виде "ключ-значение" (хэш таблицы). Memcached используется для кэширования данных в оперативной памяти, позволяя существенно ускорить работу веб-приложений, уменьшив нагрузку на базу данных. Как уже было описано в статье Кэширование спасет ваш Drupal сайт Memcached можно использовать как кэширующий бэкенд для Drupal 7. В этой статье мы рассмотрим установку Memcached в Debian и настройку как кэширующий бэкенд для Drupal 7.
Установка Memcached
Для установки memcached выполняем команду
aptitude install memcached php7.0-memcached
В файле конфигурации /etc/memcached.conf прописываем настройки
# Запуск memcached как демона -d # файл лога memcached logfile /var/log/memcached.log # Подробный вывод # -v # Максимально подробный вывод # -vv # Количество памяти, выделенной под memcached # Memcached будет постепенно выделять этот объем оперативной памяти. -m 128 # Порт для подключения к Memcached -p 11211 # Пользователь, под который будет запущен демон Memcached -u www-data # IP на котором слушает демон -l 127.0.0.1 # Можно ограничить количество подключений # -c 1024
Перезапуск Memcached
/etc/init.d/memcached restart
Существует два модуля для Drupal7, обеспечивающих интеграцию Drupal с демоном memcached. Рассмотрим установку и настройку каждого из них.
Установка модуля Memcache для Drupal 7
Скачиваем и устанавливаем последнюю версию Drupal модуля Memcache, например с помощью drush
drush dl memcache
Для установки Memcache кэширующим класcом в файл settings.php прописываем следующие строки
$conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc'; $conf['cache_default_class'] = 'MemCacheDrupal';
Настройка модуля Memcache
Доступные серверы memcached указываются в массиве $conf в файле settings.php. Если не указать ниодного сервера, то по умолчанию будет использоваться локальный memcached сервер 127.0.0.1:11211. Поэтому если используется только локальный memcached сервер, то больше никаких настроек не требуется.
Использование нескольких серверов Memcached
Если используется более одного сервер memcached, то необходимо добавить два массива в файл settings.php, как указано в шаблоне:
$conf['memcache_servers'] = array( host1:port => cluster, host2:port => cluster, hostN:port => cluster ); $conf['memcache_bins'] = array( bin1 => cluster, bin2 => cluster, binN => cluster );
Описание:
- Серверы Memcached описываются как host:port (Ip адрес:Порт).
- Bins (бины) это группы данных, которые кэшируются вместе и называются как параметр $table в функции cached_set(). Например cache_filter, cache_menu. По умолчанию используется 'cache'.
- Clusters (кластеры) — это группы серверов, которые функционируют как единый пул памяти.
- Несколько Bins (бинов) могут быть назначены для одного Cluster.
- Cluster (кластер) по умолчанию — 'default'.
Пример конфигурации c двумя кластерами 'default' и 'cluster2'. Пять memcached серверов поделены между двумя кластерами. Бины 'cache_filter' и 'cache_menu' размещены на 'cluster2', остальные бины размещены в 'default':
$conf['memcache_servers'] = array( '10.1.1.1:11211' => 'default', '10.1.1.1:11212' => 'default', '10.1.1.2:11211' => 'default', '10.1.1.3:11211' => 'cluster2', '10.1.1.4:11211' => 'cluster2' ); $conf['memcache_bins'] = array( 'cache' => 'default', 'cache_filter' => 'cluster2', 'cache_menu' => 'cluster2' );
Использование сервера Memcached несколькими Drupal сайтами
Если требуется, чтобы несколько Drupal сайтов разделяли memcached сервер, то требуется указать уникальный префикс для каждого Drupal сайт в массиве $conf в файле settings.php, например:
$conf['memcache_key_prefix'] = 'something_unique';
Установка модуля Memcache Storage для Drupal 7
Данный модуль является прямым и единственным конкуретном - модуля Memcache.
В этом модуле корректно реализован механизм инвалидации кэша, более проработаный режим отладки, появилась возможность гибкого сброса кэша. Теперь можно не только очистить все данные из Memcache из админки, но и очистить любой сегмент кэша отдельно.
Скачиваем и устанавливаем последнюю версию Drupal модуля Memcache Storage, например с помощью drush
drush dl memcache_storage drush en memcache_storage
Редактируем файл settings.php для настройки модуля Memcache Storage. Базовая конфигурация выглядит следующим образом:
$conf['cache_backends'][] = 'sites/all/modules/memcache_storage/memcache_storage.inc'; $conf['cache_default_class'] = 'MemcacheStorage'; $conf['cache_class_cache_form'] = 'DrupalDatabaseCache'; $conf['cache_class_cache_update'] = 'DrupalDatabaseCache';
Переходим на страницу Status report(/admin/reports/status) для проверки статуса Memcache Storage.
Настройка модуля Memcache Storage
Доступные серверы memcached и бины указываются в массиве $conf в файле settings.php, как и в случае настройки модуля Memcache.
$conf['memcache_servers'] = array( host1:port => cluster, host2:port => cluster, hostN:port => cluster ); $conf['memcache_bins'] = array( bin1 => cluster, bin2 => cluster, binN => cluste );
Инвалидация кэша
Установить пользовательское время окончания срока жизни для кэшированных страниц можно следующим образом:
$conf['memcache_storage_page_cache_custom_expiration'] = TRUE; $conf['memcache_storage_page_cache_expire'] = 60 * 60 * 24; (1 день)
Вместе с настройкой модуля Cache Expiration позволяет снизить нагрузку с вашего сервера(ов), если вы имеете много анонимных пользователей.
Использование сервера Memcached несколькими Drupal сайтами
Если требуется, чтобы несколько Drupal сайтов разделяли memcached сервер, то требуется указать уникальный префикс для каждого Drupal сайт в массиве $conf в файле settings.php, например:
$conf['memcache_storage_key_prefix'] = 'something_unique';
Режим отладки
Включается установкой настройки memcache_storage_debug в TRUE:
$conf['memcache_storage_debug'] = TRUE;
Если вы включите режим отладки, то в нижней части каждой страницы пользователь (если у него есть соответствующие разрешения) будет видеть статистику о выполненных командах Memcached.
Проверьте правильно ли я написала подключение
Сайт 1
$conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc';
$conf['lock_inc'] = 'sites/all/modules/memcache/memcache-lock.inc';
$conf['memcache_stampede_protection'] = TRUE;
$conf['cache_default_class'] = 'MemCacheDrupal';
$conf['memcache_key_prefix'] = '1';
// The 'cache_form' bin must be assigned to non-volatile storage.
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';
// Don't bootstrap the database when serving pages from the cache.
$conf['page_cache_without_database'] = TRUE;
$conf['page_cache_invoke_hooks'] = FALSE;
$conf['memcache_servers'] = array('unix:///home/drupalmy/.system/memcache/socket' => 'default');
Сайт 2
$conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc';
$conf['lock_inc'] = 'sites/all/modules/memcache/memcache-lock.inc';
$conf['memcache_stampede_protection'] = TRUE;
$conf['cache_default_class'] = 'MemCacheDrupal';
$conf['memcache_key_prefix'] = '1';
// The 'cache_form' bin must be assigned to non-volatile storage.
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';
// Don't bootstrap the database when serving pages from the cache.
$conf['page_cache_without_database'] = TRUE;
$conf['page_cache_invoke_hooks'] = FALSE;
$conf['memcache_servers'] = array('unix:///home/drupalmy/.system/memcache/socket' => 'default');