Вы здесь

Memcache API and Integration

Улучшение быстродействия сайта на основе интеграции с memcache.

Проект Memcache API and Integration состоит из нескольких частей:

  • API для использования Memcached и библиотеки PECL Memcache с Друпалом
  • Библиотеки для кеширования (работающие с cache_get() и cache_set())
  • Дополнительных библиотек для обработки сессий (session-memcache.inc и session-memcache-db.inc)
  • Модуля, которые реализует интерфейс управления
  • Набора тестов

Для установки модуля, необходимо выполнить следующие шаги:

  • Установите бинарные файлы Memcached на сервер
  • Установите расширение PECL memcache для PHP
  • В php.ini установите memcache.hash_strategy="consistent"
  • Переведите сайт в режим обслуживания
  • Установите модуль Memcache
  • Если вы ранее устанавливали модуль Memcache, то запустите update.php
  • Запустите хотя бы один из экземпляров Memcached на сервере
  • Отредактируйте файл settings.php (смотрите ниже)
  • Отредактируйте файл settings.php включив memcache.inc или memcache.db.inc. Например: $conf['cache_inc'] ='sites/all/modules/memcache/memcache.db.inc';
  • Выведите сайт из режима обслуживания

Файлы memcache.inc или memcache.db.inc используются вместо стандартного файла cache.inc. Вариант с memcache.db.inc сохраняет все данные также в базе данных, поэтому вы можете получить выгоду от скорости работы сайта даже в том случае, если Memcache будет выключен. Сайт не должен прекращать работу из-за недоступности Memcache, это только вопрос того, доступно ли кеширование или нет. Вариант с memcache.inc не сохраняет какую-либо информацию в базе данных, таким образом с ним можно получить лучшее быстродействие. Если вы используете этот вариант, то важно, чтобы у вас было достаточно памяти для использования Memcache для хранения всех данных (включая кеш страниц), в другом случае, неудачные обращения в кеш погубят всю выгоду от кеширования.

Для включения модуля, измените значение переменной $conf в файле settings.php, чтобы сказать Друпалу о том, какой файл cache_inc следует использовать:

<?php
$conf
= array(
  
// The path to wherever memcache.inc is. The easiest is to simply point it
   // to the copy in your module's directory.
  
'cache_inc' => './sites/all/modules/memcache/memcache.inc',
  
// or
   // 'cache_inc' => './sites/all/modules/memcache/memcache.db.inc',
);
?>

Если вы хотите простую версию, то можете начать с одним стандартным экземпляром Memcache на своём веб-сервере: memcached -m 24 -p 11211 -d. Если для ваших потребностей этого достаточно, то никакой другой настройки не требуется. Если вы хотите использовать этот модуль с возможностью кластеризации и хранить кеш среди нескольких машин или кеш будет храниться на машине, которая отличается от веб-сервера, читайте дальше.

Доступные memcache-серверы определяются переменной $conf в файле settings.php. Если вы не определите ни одного сервера, memcache.inc решит, что memcache запущен на адресе 127.0.0.1:11211. Если это так и вы не хотите ничего менять, то дальнейшее конфигурирование не требуется.

Если у вас запущено больше одного memcache-экземпляра, вам нужно добавить два массива в переменную $conf; — memcache_servers и memcache_bins. Массивы используют следующий образец:

'memcache_servers' => array(host1:port => cluster, host2:port => cluster, hostN:port => cluster)
'memcache_bins' => array(bin1 => cluster, bin2 => cluster, binN => cluster)

Предупреждение: избегайте использования localhost, используйте IP-адреса или названия хостов, которые будут сохранятся во всей сети. Модель bin/cluster/server может быть описана следующим образом:

  • Серверы и экземпляры memcache идентифицируются как «хост:порт»
  • Bins являются группами данных, которые получают кеш совместно и используют карту 1:1 для параметра $table param в cache_set(). Примерами из Друпала являются cache_filter или cache_menu. Стандартное значение: cache
  • Кластеры являются группами серверов, которые взаимодействуют как пул памяти
  • Несколько bins могут быть назначены кластеру
  • Стандартный кластер: default

Вот пример простой установки, которая использует два экземпляра memcache, оба запущены на адресе 10.1.1.1. Экземпляр на 11212 принадлежит кластеру pages и таблица cache_page относится к кластеру pages. Таким образом, всё, что кешируется, за исключением кеша страниц (cache_page), будет размещено в default или 11211. Кеш страниц будет в 11212.

<?php
$conf
= array(
 
'memcache_servers' => array('10.1.1.1:11211' => 'default',
                             
'10.1.1.1:11212' => 'pages'),
 
'memcache_bins' => array('cache_page' => 'pages'),
);
?>

Вот пример конфигурации, которая использует два кластера, default и cluster2. Пять экземпляров memcache разделены между двумя кластерами. cache_filter и cache_menu относятся к cluster2, все другие к default.

<?php
$conf
= array(
 
'cache_inc' => './sites/all/modules/memcache/memcache.inc',
 
'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'),

 
'memcache_bins' => array('cache' => 'default',
                          
'cache_filter' => 'cluster2',
                          
'cache_menu' => 'cluster2'),
);
?>

Использование префиксов

Если вы хотите иметь несколько установок Друпала распределённых среди экземпляров memcache, вам нужно включить уникальный префикс для каждой установки Друпала в массив переменной $conf в файле settings.php:

<?php
$conf
= array(
 
'memcache_key_prefix' => 'something_unique',
);
?>

Книга

Комментарии

Изображение пользователя Gostemilov

Шутку юмора оценил. То есть предлагается снести весь PHP код settings.php и вместо него прописать другой? А то, что массив $conf уже назначен в settings - вроде как и не считается?

А если серьезно - memcahed запущен, но добавление вышеприведенного кода или же $conf['cache_inc'] = 'sites/all/modules/memcache/memcache.inc'; просто тупо вешает сайт.