Битрикс memcached. Настройка

Установка memcached

Если используете 1С-Битрикс: Веб-окружение, то memcached и уже установлен. Его необходимо включить залогинившись в BitrixEnv на сервере выбрав в меню Configure Memcahed service for the pool.

Затем переходите к конфигурации memcached.

Если же memcached не установлен или вы используете не стандартное веб-окружение, установите его на сервер. В CentOS это делается так:

# yum -y install memcached

Далее добавьте memcached в автозагрузку.

# service memcached start
# chkconfig memcached on

Установите библиотеку php-memcache (в 1С-Битрикс: Веб-окружение модуль уже подключён).

# yum -y install php-pecl-memcache

Затем перезагрузите apache.

Конфигурация memcached

Файле /etc/sysconfig/memcached задайте следующие параметры (если нет причин использовать иное):

# Ansible managed
# memcached settings
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="1024"
OPTIONS="-l 127.0.0.1 -U 0 -t 8"

Примечание: параметры MAXCONN (количество одновременных подключений, по умолчанию 1024), CACHESIZE (объем памяти для кэша, по умолчанию 64MB) подбираются экспериментальным путем в зависимости от характера нагрузки и от имеющихся ресурсов. Оценить объем памяти, необходимой для кэширования (параметр CACHESIZE), можно по размеру вашего файлового кэша. Если на проекте файловый кэш занимает 3 GB, то использование memcached c 256МБ памяти не будет эффективным за счет частого вытеснения.

Options: «-t 8» — количество потоков memcached (по умолчанию 4); «-U 0» — порт для UDP, 0 — отключен; «-l 127.0.0.1» — обязательно убедитесь, что параметр -l содержит адрес 127.0.0.1. Он разрешает подключение к memcached только с локального интерфейса и делает его уязвимым для amplification атак из сети.

После настройки memcaсhed перезапустите его:

CentOS 6:

service memcached restart

CentOS 7:

systemctl restart memcached.service

Настройка memcached в 1С-Битрикс

Чтобы 1С-Битрикс стал использовать memcached нужно внести изменения в конфигурационные файлы.

Если версия ядра выше 14.0, достаточно добавить только .settings_extra.php

И в файле /bitrix/.settings_extra.php (если его нет, то создать)

<?php
return array(
  'cache' => array(
    'value' => array(
      'type' => 'memcache',
      'memcache' => array(
        'host' => '127.0.0.1',
        'port' => '11211',
      ),
      'sid' => $_SERVER["DOCUMENT_ROOT"]."#01"
    ),
  ),
);
?>

В файле /bitrix/php_interface/dbconn.php (если версия ядра меньше 14.0)

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");

Вместо файла settings_extra.php секцию с memcache можно добавить в файл /bitrix/.settings.php

'cache' => array(
     'value' => array (
         'type' => 'memcache',
         'sid' => $_SERVER["DOCUMENT_ROOT"]."#01",
         'memcache' => array(
             'host' => '127.0.0.1',
             'port' => '11211',
         ),
     ),
     'readonly' => false,
 ),
// ИЛИ
  'cache' => array(
      'value' => array(
          'type' => array(
              'class_name' => '\\Bitrix\\Main\\Data\\CacheEngineMemcache',
              'extension' => 'memcache'
          ),
          'memcache' => array(
              'host' => '127.0.0.1',
              'port' => '11211',
          ),
          'sid' => $_SERVER["DOCUMENT_ROOT"]."#01"
      ),
  ),

Убедиться, что 1С-Битрикс подключился к memcached можно панели производительности https://xn--80aae4a1bi2b.ru/bitrix/admin/perfmon_panel.php

или с помощью скрипта

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
$cache = new CPHPCache();
if ($cache->InitCache(3600, '12356356gt' , '/' )) {
    echo "cache";
    $res = $cache->GetVars();
    $arResult = $res['arResult'];
} elseif ($cache->StartDataCache()) {
    echo "no cache";
    $arResult = array(1,2,3,4,5);
    $cache->EndDataCache(array("arResult" => $arResult));
}

Также отличный наглядный скрипт есть в этой статье (в самом конце), который показывает готовность всех компонентов к работе.

Как очистить кэш memcached

Если понадобится очистить кэш memcached это можно сделать. Самый простой способ — telnet.

$ telnet localhost 11211
flush_all
quit

Или через netcat.

echo "flush_all" | nc localhost 11211