Хранение сессий PHP в memcached

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

При определенном уровне нагрузки это приведет к тому, что даже простое открытие файла сессии будет длиться секунду и дольше. Что неизбежно привезет к зависанию клиентских запросов в пуле PHP-FastCGI и появлению ошибок 502 Bad Gateway при попытке открыть любой пхп скрипт — только лишь потому, что большинство воркеров будут заняты открытием файлов сессий.

Само собой, подобный вариант развития событий нас не устроит. Оптимальным в данном случае будет вынесение хранилища сессий в memcache — очень быстрый и удобный в работе. Для начала установим memcache:

#cd /usr/ports/databases/memcached && make install clean

Добавим в rc.conf параметры конфигурации memcache:

memcached_enable="YES"
memcached_flags="-l 127.0.0.1 -m 64"

И запустим сервер memcache:

#/usr/local/etc/rc.d/memcached start
Starting memcached.

Готовый хендлер для хранения сессий в memcache уже содержится в соответствующем расширении php:

#cd /usr/ports/databases/pecl-memcache && make install clean

Включаем использование этого хендлера в /usr/local/etc/php/php.ini. Если этого файла нет, его нужно создать.

session.save_path=tcp://127.0.0.1:11211
session.save_handler=memcache
session.name=SESSIONID

Перезапускаем php и данные сессий начинают складывать в хранилище в оперативной памяти!

#/usr/local/etc/rc.d/php-fpm reload

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *