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