Настройка: Redis кеширование для 1С-Битрикс, под Ubuntu

Просмотров: 1800

Задача: имеем полностью настроенный и оптимально сконфигурированный веб-сервер под управлением Ubuntu 20.04 на котором запущен интернет магазин c 1С-Битрикс. Нужно настроить хранение кеша в Redis хранилище (инструкция совместима и с Debian).

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

Установка и конфигурирование Redis на Ubuntu 22.04. (подойдет и для 18 и для 20. А также для актуальных Debian дитрибутивов)

Для начала установим Redis командой:

sudo apt install redis-server -y

Это позволит загрузить и установить Redis и его зависимости. После этого необходимо внести одно важное изменение в файл конфигурации. Открываем файл конфигурации redis.conf:

sudo nano /etc/redis/redis.conf

Находим строку supervised no и меняем на supervised systemd. Эта директива позволяет использовать систему инициализации systemd для управления Redis как службой, на Ubuntu

На всякий случай устанавливаем "Redis PHP". Может быть необходимо если, например, используете панель управления сервером HestiaCP или обычный LAMP сервер.

sudo apt install php-redis
Если используете HestiaCP— лучше всего устанавливать Redis для конкретной версии php. Например для 8.2.*:
apt install php8.2-redis

Далее необходимо внести еще ряд изменений в конфигурационный файл.

По умолчанию Redis использует всю доступную память на сервере. Рекомендуется настроить его так, чтобы он занимал около 60-70% оперативной памяти. Это можно сделать, отредактировав строчку в redis.conf следующим образом:

maxmemory 1024mb #Выделено 1Gb
maxmemory-policy volatile-ttl #удалять старый кеш если не помещается

Redis будет открывать новое соединение для каждого запроса. Чтобы избежать замедления работы из-за открытия нового соединения для каждого запроса, необходимо включить keepalive. Для этого измените строку в redis.conf на:

tcp-keepalive 0

Redis также пытается сохранить данные на диск, что может замедлить работу. Рекомендуется закомментировать строки, начинающиеся с save.

#save 900 1
#save 300 10
#save 60 10000

Некоторые параметры, такие как tcp-backlog и maxclients, могут потребоваться отредактировать под конкретные требования проекта и ожидаемую нагрузку:

tcp-backlog 511 #можно увеличить до 65536
maxclients 10000 #максимальное число соединений

В новых версиях redis собственное значение tcp-backlog установлено на 511, и вам потребуется увеличить его, если у вас много соединений.

maxclients - как только лимит будет достигнут, Redis закроет все новые соединения, отправляя. ошибку "достигнуто максимальное количество клиентов".

После внесения всех изменений перезапускаем сервис Redis командой

sudo systemctl restart redis.service

Настройка кеширования в Redis на стороне 1С-Битрикс

На стороне 1С-Битрикс все просто: в директории /bitrix/ открываем файл .settings_extra.php (если его нет создаем) и заменяем все содержимое на:

return array(
    'cache' => array(
        'value' => array(
            'type' => array(
                'class_name' => '\\Bitrix\\Main\\Data\\CacheEngineRedis',
                'extension' => 'redis'
            ),
            'redis' => array(
                'host' => '127.0.0.1',
                'port' => '6379',
            ),
            'sid' => $_SERVER["DOCUMENT_ROOT"] . "#ho"
        ),
    ),
);

Обязательно укажите уникальное значение в качестве sid, например, первые две буквы домена, чтобы избежать перемешивания кешей разных сайтов в Redis.

Убедитесь, что кеширование в Redis успешно настроено, зайдя в админпанель, раздел "Настройки -> Производительность -> Панель производительности". Там должен быть указан текущий способ кеширования, используемый на сайте (скрин в начале статьи).

Видео по настройке Redis на Ubuntu 22.04

Видео входит в одну из серий видеокурса по разработке сайта на 1С-Битрикс.

Михаил Базаров 22.09.2023
Оптимальные настройки Redis могут сильно зависеть от конкретного применения, а также от характеристик сервера и ожидаемой нагрузки. Вот базовые настройки, которые можно использовать в большинстве случаев:

Максимальный объем памяти:
Код
maxmemory 2GB

Это значение устанавливает максимальный объем памяти, который Redis может использовать для хранения данных. Здесь установлено 2 гигабайта.
Политика вытеснения:
Код
maxmemory-policy volatile-ttl

Эта политика указывает Redis, какой ключ вытеснить, если достигнут максимальный объем памяти. В данном случае, Redis будет вытеснять ключи с истекшим временем жизни (TTL) с наименьшей частотой использования.
Количество соединений:
Код
maxclients 10000

Этот параметр устанавливает максимальное количество одновременных клиентских соединений. Установите его в соответствии с ожидаемой нагрузкой.
Очередь ожидающих соединений:
Код
tcp-backlog 511

Этот параметр указывает максимальное количество ожидающих соединений. Вам может потребоваться увеличить его, если у вас много соединений.
Отключение сохранения на диск:
Код
save ""

Если вам не требуется сохранение данных на диск, лучше отключить эту опцию.
Отключение журналирования в диск:
Код
appendonly no

Если вы не используете журналирование в диск (append-only file), то его можно отключить.

Эти параметры представляют собой базовые рекомендации и могут потребоваться корректировки в зависимости от конкретного сценария использования Redis. Важно также регулярно мониторить производительность и адаптировать настройки под реальные условия и нагрузку.