Настройка Memcached позволяет организовать хранение кэша в оперативной памяти.
Memcache является программным пакетом, который используется для ускорения работы приложения — Хранение сессий в memcached является часто применяемым и эффективным решением.
Memcache может работать как на одном с приложением сервере, так и на других серверах — что является более популярным решением.
Подключение к Memcache по умолчанию осуществляется по порту 11211.
Настройка Memcached
Базовая настройка сводится определению лимита памяти для службы и заданию порта или пути к Unix сокету, по умолчанию используется порт. Если служба не установлена её прежде всего нужно установить, для Debian / Ubuntu:
apt install memcached
В CentOS yum install memcached
Файл с настройками размещается в зависимости от дистрибутива по пути /etc/default/memcacached или по пути /etc/sysconfig/memcached.
cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
Выделяемая сервису память определяется параметром CACHESIZE
, его значение для крупных ресурсов нужно увеличивать. Кэширование работает по принципу вытеснения новыми данными старых, при маленьком CACHESIZE
данные будут обновляться слишком часто и эффекта ускорения не будет.
Чтобы выполнить подключение к серверу на уровне приложения достаточно отредактировать конфигурационные файлы сайта (для каждой CMS свои, как именно задается подключение нужно смотреть в документации CMS) и файл php.ini — в него добавляется имя обработчика сессий и путь к нему:
session.save_handler = memcache
session.save_path = "tcp://localhost:11211"
Подключение к внешнему серверу Memcache
Под Memcache часто выделяется отдельный сервер — подключение в этом случае осуществляется таким же образом, изменяется только IP-адрес (белый адрес или адрес из локальной сети):
session.save_handler = memcache
session.save_path = "tcp://123.123.123.123:11211"
Кластер серверов Memcache
Так выглядит подключение при использовании кластера серверов:
session.save_handler = memcache
session.save_path="tcp://123.123.123.123:11211, tcp://123.123.123.124:11211"
В директиве session.save_path можно передавать параметры, используемые при работе с РНР сессиями:
session.save_path="tcp://123.123.123.123:11211?persistent=1&weight=1&timeout=1&retry_interval=25"
В примере заданы необходимость постоянного использования сервера, таймаут, вес сервера (их может использоваться несколько и интервал попыток повторного установления соединения в случае его разрыва).
Т.е. создание кластеров любого размера не представляет никакой сложности, нет необходимости настраивать репликацию и перемещать данные с одного сервера на другой, Memcache поддерживает это изначально.
В качестве альтернативы можно использовать Redis. Стоит учитывать, что ни одно из хранилищ не гарантирует сохранности данных в случае сбоев (например, отключения электропитания). Это вызвано тем, что информация хранится в энергозависимой оперативной памяти.
Использовать Memcahce и аналоги при этом все равно стоит.
Хранение сессий в хранилище на отдельном сервере является необходимым условием построения отказоустойчивой системы для веб проекта.