Как настроить Redis в качестве кэширующего сервера

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

Как настроить Redis в качестве кэширующего сервера

Установка Redis производится в два шага:

  1. Подключение репозитория backports. Версия в стандартном репозитории слишком стара.
  2. Установка командой aptitude install -t jessie-backports redis-server redis-tools

Содержание статьи:

  • 1 Настраиваем оптимальную конфигурацию
  • 2 Кэширование php сессий

Настраиваем оптимальную конфигурацию

В Debian конфигурационный файл расположен в каталоге /etc/redis/ и называется redis.conf.

В первую очередь необходимо исправить ошибку с некорректно указанным максимальным количеством tcp соединений. Это актуально в случае использования tcp-сокетов.

Печатаем в консоли команду cat /proc/sys/net/core/somaxconn и выставляем соответствующее количество:

tcp-backlog 128

Для более быстрой работы подключаем возможность работы с unix-сокетом.

unixsocket /var/run/redis/redis.sock unixsocketperm 777

Ограничиваем максимальное количество подключаемых клиентов. Если необходимо больше 1024-х подключений, также потребуется изменить ограничение на количество одновременно открытых файлов (ulimit).

maxclients 1024

Определяем количество выделяемой оперативной памяти для кэша. В случае указания нулевого значения, будет использована вся доступная оперативную память для кэша.

maxmemory 64mb

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

maxmemory-policy allkeys-lru

Так же, во избежание проблем с работой Redis (пункт 3 руководства, англ), следует отключить функцию ядра Transparent HugePages.

# echo never > /sys/kernel/mm/transparent_hugepage/enabled

Перезапускаем для вступления изменений в силу.

# service redis restart

И добавляем в файл /etc/rc.local следующие строки, чтобы после перезагрузки сервера данная функция была отключена.

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then    echo never > /sys/kernel/mm/transparent_hugepage/enabled fi if test -f /sys/kernel/mm/transparent_hugepage/defrag; then    echo never > /sys/kernel/mm/transparent_hugepage/defrag fi

Кэширование php сессий

Настроить php на хранение сессий можно несколькими путями, в зависимости от используемой связки.

Напрямую в php.ini

[Session] session.save_handler = redis session.save_path = "unix:///run/redis/redis.sock"

Apache2 и mod_php (в файле виртуального хоста или apache2.conf)

 php_admin_value session.save_handler "redis" php_admin_value session.save_path "unix:///run/redis/redis.sock"

PHP-FPM (в файле пула)

php_admin_value[session.save_handler] = "redis" php_admin_value[session.save_path] = "unix:///run/redis/redis.sock"