141 слов | 1 минута

Настройка Memcached для 1С-Битрикс

Memcached — система кэширования данных в оперативной памяти. Подключение к 1С-Битрикс снижает нагрузку на базу данных и ускоряет загрузку страниц.

Установка

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

Для нестандартного окружения установите Memcached вручную (CentOS):

yum -y install memcached
service memcached start
chkconfig memcached on
yum -y install php-pecl-memcache
service httpd restart

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

Отредактируйте /etc/sysconfig/memcached:

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

Параметры:

  • MAXCONN — максимальное количество одновременных подключений (по умолчанию 1024)
  • CACHESIZE — объём памяти для кэша в МБ (оцените по размеру файлового кэша проекта)
  • -t 8 — количество потоков
  • -U 0 — UDP отключён
  • -l 127.0.0.1 — только локальный интерфейс (обязательно для безопасности)

Важно: параметр -l 127.0.0.1 обязателен — без него Memcached будет доступен из сети и уязвим для атак amplification.

Перезапустите Memcached:

# CentOS 6
service memcached restart

# CentOS 7+
systemctl restart memcached.service

Подключение к 1С-Битрикс

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

Альтернативно — добавить секцию в /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,
),

Проверка подключения

Откройте панель производительности: 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";
} elseif ($cache->StartDataCache()) {
    echo "no cache";
    $cache->EndDataCache(array("arResult" => array(1,2,3,4,5)));
}

Очистка кэша

Через telnet:

telnet localhost 11211
flush_all
quit

Через netcat:

echo "flush_all" | nc localhost 11211