Кэширование данных в оперативной памяти посредством Redis является одним из методов ускорения работы сайта. Данное хранилище высокопроизводительно и может использоваться для кэширования не только сайтов, но и сессий, а также в качестве нереляционной базы данных.
Установка Redis производится в два шага:
- Подключение репозитория backports. Версия в стандартном репозитории слишком стара.
- Установка командой
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"