Настройка Memcached: подключение к Memcached и его использование в веб-проектах


Настройка 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"

Настройка Memcached


Подключение к внешнему серверу Memcache


Под Memcache часто выделяется отдельный сервер — подключение в этом случае осуществляется таким же образом, изменяется только IP-адрес (белый адрес или адрес из локальной сети):

session.save_handler = memcache
session.save_path = "tcp://123.123.123.123:11211"

memcache remote


Кластер серверов 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"

Хранение сессий в Memcached


В примере заданы необходимость постоянного использования сервера, таймаут, вес сервера (их может использоваться несколько и интервал попыток повторного установления соединения в случае его разрыва).


Т.е. создание кластеров любого размера не представляет никакой сложности, нет необходимости настраивать репликацию и перемещать данные с одного сервера на другой, Memcache поддерживает это изначально.



В качестве альтернативы можно использовать Redis. Стоит учитывать, что ни одно из хранилищ не гарантирует сохранности данных в случае сбоев (например, отключения электропитания). Это вызвано тем, что информация хранится в энергозависимой оперативной памяти.

Использовать Memcahce и аналоги при этом все равно стоит.



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

Сказать спасибо