Битрикс, Memcached и PHP 5.6

Все манипуляции, описанные в статье производились на Ubuntu 14.04, для вашей ОС пути к файлам могут отличаться. Для выполнения действий из этой статьи вам потребуются root-привелегии.

Установка и настройка Memcached на сервере

Устанавливаем Memcached на сервер следующей командой:

apt-get install memcached

Настраиваем Memcached в файле /etc/memcached.conf:

# Запуск Memcached в качестве демона
-d
# Файл для записи логов
logfile /var/log/memcached.log
# Размер выделяемой оперативной памяти
-m 128
# Порт для соединения
-p 11211
# Имя пользователя, от которого будет работать Memcached
-u memcache
# IP-адрес, который будет слушаться. Если Битрикс и Memcached у вас на одном сервере, укажите 127.0.0.1
-l 127.0.0.1

После сохранения настроек перезапускаем Memcached:

/etc/init.d/memcached restart

Далее необходимо установить дополнительные модули для PHP, в том числе модуль для работы с Memcached. Внимание! Для PHP версии 5.6 пакет php-dev называется php5.6-dev, а не php5-dev (встречается во многих инструкциях по настройке Memcached). Соответственно, команда для PHP 5.6 будет выглядеть следующим образом:

apt-get install php5.6-dev libmemcache-dev

Для старших версий PHP 5 команда будет следующей:

apt-get install php5.6-dev libmemcache-dev

Устанавливаем модуль memcache:

pecl install memcache

После установки модуля memcache обратите внимание на пути к установленным файлам, выведенными в процессе установки. В нашем случае это /usr/include/php/20131226 — здесь нужно обратить внимание на директорию, название которой представляет собой 8 последовательных цифр — 20131226. Они должны совпадать с номером версии вашего PHP Api. Узнать вашу версию можно в phpinfo() — строка PHP Extension или командой phpize -v.

Кроме этого, стоит также обратить внимание на путь установки memcache.so до этих 8 цифр, в последних строках вывода установки:

Build process completed successfully
Installing '/usr/lib/php/20131226/memcache.so'

В нашем случае файл memcache.so должен находиться в директории /usr/lib/php5/20131226/, по этому нам нужно его туда скопировать:

cp /usr/lib/php/20131226/memcache.so /usr/lib/php5/20131226/memcache.so

Далее необходимо добавить запись «extension=memcache.so» в ваш php.ini. В нашем случае он находится в /etc/php5/apache2/. После чего нужно перезапустить Apache:

/etc/init.d/apache2 restart

Настройка Memcached в Битриксе

До версии Bitrix 14.0 настройка производилась в файле dbconn.php (находится в директории /bitrix/php_interface/), в более свежих редакциях настройка производится в файле .settings.php (находится в директории /bitrix/). Дабы исключить какие-либо несостыковки, рекомендуется произвести настройки в обеих файлах.

В файле .settings.php

'cache' => array(
    'value' => array(
        'type' => 'memcache',
        'memcache' => array(
            'host' => '127.0.0.1',
            'port' => '11211'
        ),
        'sid' => $_SERVER["DOCUMENT_ROOT"]."#01"
    ),
    'readonly' => false,
),

В файле dbconn.php

define("BX_CACHE_TYPE", "memcache");
define("BX_CACHE_SID", $_SERVER["DOCUMENT_ROOT"]."#01");
define("BX_MEMCACHE_HOST", "127.0.0.1");
define("BX_MEMCACHE_PORT", "11211");

Как проверить, что Memcached работает и подключен к Битриксу?

Проверить, работает ли Memcached на сервере, можно командами командной строки top, iotop, htop и им подобными. В выводимыми ими списками нужно искать memcache/memcached.

Проверить, подключен ли модуль PHP можно функцией phpinfo(). В выводимой ей информацией нужно искать блок memcache. Внимание! Не memcached (разница в последней букве d), т.к. Битрикс этот модель не поддерживает.

В самом Bitrix проверить, подключен ли Memcached, можно в 2 местах:

  1. Панель производительности.
    Находится в «Настройки» -> «Производительность» -> «Панель производительности» -> вкладка «Битрикс» -> настройка «Хранение кеша». В колонке «Значение» должно стоять memcache.
  2. Композитный сайт.
    Находится в «Настройка» -> «Настройки продукта» -> «Композитный сайт» -> вкладка «Настройки» -> блок «Механизм хранения кеша» -> настройка «Хранить кеш в». Если в этом выпадающем списке можно выбрать memcached, значит он подключен, в противном случае в скобках к этому пункту будет написано, что memcached не подключен. После выбора пункта с Memcached можно указать хост и порт и проверить соединение.

Что бы проверить работу непосредственно кеширования, можно написать простенький скрипт. Примеров достаточно на просторах интернета.