Кэширование данных в оперативной памяти посредством Redis является одним из методов ускорения работы сайта. Данное хранилище высокопроизводительно и может использоваться для кэширования не только сайтов, но и сессий, а также в качестве нереляционной базы данных.
Установка Redis производится в два шага:
- Подключение репозитория backports. Версия в стандартном репозитории слишком стара.
- Установка командой aptitude install -t jessie-backports redis-server redis-tools
Настраиваем оптимальную конфигурацию
В 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)
<,IfModule mod_php5.c>, php_admin_value session.save_handler ‘redis’ php_admin_value session.save_path ‘unix:///run/redis/redis.sock’ <,/IfModule>,
PHP-FPM (в файле пула)
php_admin_value[session.save_handler] = ‘redis’ php_admin_value[session.save_path] = ‘unix:///run/redis/redis.sock’