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

Memcached — программное обеспечение, которое используется для кэширования данных, требующих при генерации большого количества ресурсов.

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

Установка 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 нужно внести изменения в конфигурационные файлы.

В файле /bitrix/php_interface/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");

И в файле /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"
    ),
  ),
);
?>

Вместо файла 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,
 ),

Убедиться, что 1С-Битрикс подключился к memcached можно панели производительности http://вашсайт.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

Ссылки

Официальный сайт memcached.org
Ручная настройка Memcached
Ограничение доступа к Memcached

На этом всё. Но вы можете помочь проекту. Обещаю писать больше полезных статей.

А если статья помогла или понравилась, пожалуйста поделитесь ей в соцсетях.