сессии php в redis
Использование Redis
В этой статье мы расскажем что такое Redis, его преимущества и для каких целей он используется.
Redis (REmote DIctionary Server) — сетевое журналируемое хранилище данных типа «ключ» — «значение» с открытым исходным кодом. По сути Redis представляет собой базу данных (как MySQL), только упрощенную и более быструю за счет отсутствия связи между данными, а также простому механизму работы с данными (подход noSql).
Redis, за счет его высокой скорости работы, удобно использовать для хранения различных счетчиков, например, количества просмотров страниц сайта, или же каких-либо временных данных. Достаточно распространено хранение кеша сайта, хранение PHP-сессий.
Пример хранения PHP-сессии в Redis
В первую очередь нужно включить Redis. Сделать это можно в Панели управления аккаунтом, в разделе Сервисы. По умолчанию сессии хранятся в файлах. Эту информацию можно увидеть в секции session, вызвав PHP-функцию phpinfo.
Первая строка определяет имя обработчика хранения сессий.
Вторая определяет путь для хранения сессий. Redis работает как демон на стандартном порту, поэтому указываем:
Либо включить опцию в разделе «Сайты», вышеописанные опции в таком случае будут применены к сайту автоматически:
Также включить хранение сессий в redis’е можно сразу для всех сайтов:
После включении опции, в phpinfo, можно наблюдать что сессии хранятся в Redis:
Проверим результат с помощью тестового скрипта, который создает сессию:
Делаем запрос к скрипту:
Подключаемся к Redis и проверяем, что сессия сохранилась:
Далее мы рассмотрим подключение Redis с целью кеширования данных в самых распространенных CMS.
Подключение Redis к WordPress
Для подключения Redis к CMS WordPress в первую очередь необходимо зайти в административную часть сайта. В качестве примера рассмотрим домен my-site.com, в этом случае ссылка будет следующая: http://my-site.com/wp-login.php или http://my-site.com/wp-admin.
В административной панели следует выбрать пункт меню Плагины, затем подпункт Добавить новый.
На открывшейся странице ввести в поле поиска плагинов Redis.
Затем нажать «Установить» в окне плагина «Redis Object Cache», после чего появится сообщение о успешной установке плагина:
Затем следует перейти в раздел Плагины, подраздел Установленные, и активировать плагин.
После чего появится сообщение о том, что WordPress подключен к Redis:
Плагин установлен и активирован, осталось добавить нужные директивы в конфигурационный файл wp-config.php.
Сделать это можно через Файловый менеджер.
Открываем директорию сайта и нажимаем Править на нужном файле, в нашем случае это wp-config.php.
В открывшемся окне добавляем в начало файле следующие строки:
Готово, сайт полноценно работает с Redis.
Проверяем, что данные действительно пишутся в Redis:
Сделаем тест производительности с помощью утилиты Siege.
Результаты с отключенным Redis:
Результаты с подключенным Redis:
Видим, что среднее время на ответ сервера уменьшилось, а количество открытых страниц, в свою очередь, наоборот увеличилось.
Подключение Redis к Joomla
Для подключения Redis к CMS Joomla в первую очередь необходимо зайти в административную часть сайта:
http://my-site.com/administrator/.
В 3-ей ветке версии CMS Joomla уже есть возможность подключить хранение кеша в Redis.
Для включения в административной панели следует выбрать пункт меню Система, затем подпункт Общие настройки.
На открывшейся странице выбираем пункт меню Система.
Устанавливаем значение «кеш» в Стандартное кеширование.
Значение «обработчик кеширования» в Redis.
Остальные настройки подходят по умолчанию.
Можно убедится, что данные теперь пишутся в Redis:
С помощью утилиты Siege проверяем, как изменилась скорость работы сайта.
Результаты с отключенным Redis:
Результаты с включенным Redis:
Из всего вышесказанного можно сделать вывод, что Redis является прекрасным инструментом для работы с данными и в умелых руках может существенно улучшить производительность сайта.
Хранение php-сессий в Redis с блокировками
Стандартный механизм хранения данных пользовательских сессий в php — хранение в файлах. Однако при работе приложения на нескольких серверах для балансировки нагрузки, возникает необходимость хранить данные сессий в хранилище, доступном каждому серверу приложения. В этом случае для хранения сессий хорошо подходит Redis.
Наиболее популярное решение — расширение phpredis. Достаточно установить расширение и настроить php.ini и сессии будут автоматически сохраняться в Redis без изменения кода приложений.
Однако такое решение имеет недостаток — отсутствие блокировки сессии.
При использовании стандартного механизма хранения сессий в файлах открытая сессия блокирует файл пока не будет закрыта. При нескольких одновременных обращениях доступ к сессии новые запросы будут ожидать, пока предыдущий не завершит работу с сессией. Однако при использовании phpredis подобного механизма блокировок нет. При нескольких асинхронных запросов одновременно происходит гонка, и некоторые данные, записываемые в сессию, могут быть утеряны.
Это легко проверить. Отправляем на сервер асинхронно 100 запросов, каждый из которых пишет в сессию свой параметр, затем считаем количество параметров в сессии.
В результате получаем, что в сессии не 100 параметров, а 60-80. Остальные данные мы потеряли.
В реальных приложениях конечно 100 одновременных запросов не будет, однако практика показывает, что даже при двух асинхронных одновременных запросах данные, записываемые одним из запросов, довольно часто затираются другим. Таким образом, использование расширения phpredis для хранения сессий небезопасно и может привести к потере данных.
Как один из вариантов решения проблемы — свой SessionHandler, поддерживающий блокировки.
Реализация
Чтобы установить блокировку сессии, установим значение ключа блокировки в случайно сгенерированное (на основе uniqid) значение. Значение должно быть уникальным, чтобы любой параллельный запрос не мог получить доступ.
Значение устанавливается с флагом NX, то есть установка происходит только в случае, если такого ключа нет. Если же такой ключ существует, делаем повторную попытку через некоторое время.
Можно также использовать ограниченное время жизни ключа в редисе, однако время работы скрипта может быть изменено после установки ключа, и параллельный процесс сможет получить доступ к сессии до завершения работы с ней в текущем скрипте. При завершении работы скрипта ключ в любом случае удаляется.
При разблокировке сессии при завершении работы скрипта для удаления ключа используем Lua-сценарий:
Использовать команду DEL нельзя, так как с помощью нее можно удалить ключ, установленный другим скриптом. Такой сценарий же гарантирует удаление только в случае, если ключу блокировки соответствует уникальное значение, установленное текущим скриптом.
Подключение
Результат
После подключения нашего SessionHandler наш тестовый скрипт уверенно показывает 100 параметров в сессии. При этом несмотря на блокировки общее время обработки 100 запросов выросло незначительно. В реальной практике такого количества одновременных запросов не будет. Однако время работы скрипта обычно более существенно, и при одновременных запросах может быть заметное ожидание. Поэтому нужно думать о сокращении времени работы с сессией скрипта (вызове session_start() только при необходимости работы с сессией и session_write_close() при завершении работы с ней)
Хранение сессий в Redis и их совместное использование в PHP и Tomcat
К коду
Итак код создания сессии в PHP выглядит так:
Скрипт в работе выглядит так:
В итоге в Redis попадет запись с ключом — id сессии и данными сессии, сериализованными в JSON.
С Java все несколько сложнее.
Для начала следует установить Redis Session Manager. Процесс установки подробно описан на официальном сайте проекта. Прописываем в context.xml:
Здесь я не прописываю параметры, которые у меня совпадают с параметрами по умолчанию (например, сервер — localhost), кроме того добавлен параметр serializationStrategyClass, который задает путь к моей собственной реализации класса сериализации сессии (код будет ниже).
Скачанный tomcat-redis-session-manager-1.2-tomcat-6.jar кладем в папку lib вашего Tomcat.
Класс сериализации выглядит так:
Здесь для сериализации в JSON используется библиотека Gson, поэтому, если она у вас не установлена, установите.
Компилируем класс в Jar и кладем в папку lib вашей копии Tomcat. Пример моей команды компиляции:
Конечно на вашей машине пути к библиотекам могут отличаться. Кому лень компилировать самостоятельно, возьмите готовый Jar из моего Dropbox.
Все. После этого можно создавать сессии самым обычным путем, все работает совершенно прозрачно. Если вы выполнили указанные шаги для Tomcat и создаете сессии в PHP с использованием приведенного ранее кода, то у вас общие сессии между Tomcat и PHP.
На всякий случай привожу пример создания сессии в Tomcat:
Как видите никаких специфичных действий не требуется, совершенно обычный код создания сессии.
Результат примера на Java:
Обработка сессий PHP при помощи сервера Redis в Ubuntu 16.04
Redis – это открытое нереляционное хранилище данных и кэша типа «ключ-значение». Также Redis является сервером преобразования структур данных, предназначенным для расширенной поддержки нескольких типов данных (хэша, списков, множеств, битовых массивов и т.п.). Кроме того, Redis поддерживает кластеризацию, потому его часто используют в высокопроизводительных и масштабируемых средах.
Данное руководство поможет установить и настроить сервер Redis для обработки PHP-сессий приложения в системе Ubuntu 16.04.
Обработчик сессий отвечает за хранение и извлечение данных, сохраненных в сессиях; по умолчанию PHP использует для этого файлы. Вместе с балансировщиком нагрузки обработчик сессий может быть использован для создания масштабируемой среды PHP, в которой все ноды приложения смогут подключаться к ведущему серверу для обмена данными.
Требования
Для выполнения данного руководства использовались два сервера.
Итак, для работы понадобится:
1: Установка сервера и клиента Redis
Сначала нужно установить Redis на оба сервера: на сервер redis установите пакет Redis server, а на сервер web – PHP-расширение Redis для обработки сессий и клиент командной строки.
Установка Redis Server
Подключитесь к машине redis и установите необходимый пакет. Для этого подойдёт репозиторий PPA. Используйте наиболее актуальную версию Redis.
Примечание: Используйте PPA только из надёжных и безопасных источников.
sudo apt-add-repository ppa:chris-lea/redis-server
Чтобы подтвердить, нажмите Enter.
Обновите индекс пакетов и установите сервер Redis:
sudo apt-get update
sudo apt-get install redis-server
Чтобы убедиться, что установка прошла успешно, введите команду:
Команда создаст подключение к Redis с локального хоста на порт 6379. Если установка прошла успешно, команда вернёт:
Установка клиента и PHP-расширения Redis
Перейдите на сервер web. Здесь нужно установить клиент командной строки (для проверки подключения) и PHP-расширения Redis (для хранения данных).
Обновите индекс пакетов и установите программы:
sudo apt-get update
sudo apt-get install redis-tools php-redis
Теперь у вас есть доступ к инструменту redis-cli, но пока что сервер не принимает внешних соединений.
2: Настройка Redis для поддержки внешних соединений
По умолчанию Redis поддерживает подключения только с локального хоста. Это значит, что Redis доступен только с того сервера, на котором он установлен. Эту настройку нужно изменить.
По умолчанию Redis не предоставляет шифрования, поскольку предполагает развёртывание в изолированной сети заведомо безопасных серверов. Следовательно, чтобы все внешние соединения были безопасными, оба сервера должны находиться в изолированной сети, либо же вы должны защитить трафик между серверами при помощи специальных инструментов шифрования.
Изолированная сеть
Если серверы находятся в изолированной сети, достаточно просто отредактировать конфигурационный файл Redis и добавить IP-адрес сети.
Перейдите на сервер redis, создайте резервную копию конфигурационного файла Redis и откройте его:
sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
sudo nano /etc/redis/redis.conf
Найдите строку bind и вставьте IP-адрес сети, в которой находится сервер Redis.
bind 127.0.0.1 isolated_IP_address
Сохраните и закройте файл. Перезапустите сервис:
sudo systemctl restart redis-server.service
Откройте доступ к порту в брандмауэре.
sudo ufw allow 6379
Теперь сервер Redis может принимать внешние соединения в изолированной сети.
Инструменты шифрования
Если сервер развёрнут вне изолированной среды, обязательно нужно защитить трафик между серверами. Существует несколько способов сделать это:
Выберите один из предложенных методов и зашифруйте трафик между серверами.
3: Пароль для сервера Redis
Чтобы повысить уровень безопасности сервера Redis, нужно защитить его данные паролем. Отредактируйте конфигурационный файл /etc/redis/redis.conf.
sudo nano /etc/redis/redis.conf
Раскомментируйте строку requirepass и установите надёжный пароль. Этот пароль необходим для аутентификации Redis. Выберите сложный фразовый пароль, чтобы предотвратить brute force атаки.
Сохраните и закройте файл. Перезапустите сервис Redis:
sudo systemctl restart redis-server.service
4: Тестирование подключения и авторизации Redis
Чтобы убедиться в том, что все настройки работают должным образом, подключитесь к Redis с сервера web.
По умолчанию сервис Redis прослушивает порт 6379 на локальном интерфейсе. Однако данные могут отличаться в зависимости от настроек безопасности трафика Redis (раздел 2). С помощью клиента redis-cli и флага –h можно указать IP-адрес, с помощью флага –p – задать порт удалённого сервиса, к которому нужно подключиться.
Примечание: Если вы используете нестандартные параметры, замените 127.0.0.1 и порт 6379 соответствующими данными.
Итак, если серверы работают в изолированной среде, вам нужно использовать IP-адрес этой сети и стандартный порт 6379 (его можно не указывать).
Если вы используете stunnel или spiped, укажите номер локального порта, который подключен к удаленному сервису Redis:
Если вы используете PeerVPN, укажите IP-адрес VPN:
Общий синтаксис команды выглядит так:
Теперь вы можете подключиться к удалённому сервису Redis с сервера web.
Если вы определили пароль, вы не получите доступа к данным, а на экране появится ошибка AUTH:
keys *
(error) NOAUTH Authentication required.
Чтобы пройти аутентификацию, нужно запустить команду AUTH и указать пароль, указанный в файле /etc/redis/redis.conf.
Если всё сработало, на экране появится вывод:
Теперь снова запустите:
На экране появится примерно такой вывод:
Это значит, что на сервере Redis пока что нет никаких данных; это нормальное поведение сервера, поскольку сервер web пока что не может использовать его в качестве обработчика сессий.
Вернитесь в командную строку:
5: Настройка обработки сессий
Оставайтесь на сервере web. Откройте файл php.ini, в котором можно определить стандартный обработчик сессий PHP. Место хранения файла зависит от используемого программного стека.
В стеке LAMP в Ubuntu 16.04 этот файл обычно находится в /etc/php/7.0/apache2/php.ini. В стеке LEMP в системе Ubuntu 16.04 файл, как правило, хранится в /etc/php/7.0/fpm/php.ini.
Поиск файла php.ini (опционально)
Примечание: Если вы уже нашли файл php.ini, пропустите этот раздел.
Если вы не знаете точного пути файла php.ini, его можно быстро узнать при помощи функции phpinfo(). Просто откройте в каталоге /var/www/html файл info.php:
sudo nano /var/www/html/info.php
и поместите в него следующий код:
Затем откройте скрипт в браузере и найдите строку Loaded Configuration File. В ней указано местонахождение нужного файла.
Примечание: После этого рекомендуется удалить файл info.php, поскольку он открывает доступ к конфиденциальным данным о сервере.
Изменение настроек
Откройте файл php.ini.
Стек LAMP:
sudo nano /etc/php/7.0/apache2/php.ini
Стек LEMP:
sudo nano /etc/php/7.0/fpm/php.ini
Примечание: Если путь к файлу php.ini отличается, укажите правильный путь.
В файле php.ini найдите строку session.save_handler. По умолчанию она имеет значение files. Замените значение на redis, чтобы использовать PHP-расширение Redis вместо файлов.
Теперь вы должны найти строку session.save_path. Раскомментируйте ее и измените значение, указав строку подключения Redis в таком формате:
Опять же, правильные значения зависят от выбранного вами метода защиты данных. используйте те же данные, что и в разделе 4. Например, если вы используете stunnel или spiped, строка session.save_path будет иметь такой вид:
Сохраните и закройте файл.
Затем перезапустите сервер PHP.
В LAMP:
sudo systemctl restart apache2
В LEMP:
sudo systemctl restart php7.0-fpm
6: Тестирование обработки сессий
Чтобы убедиться в том, что Redis успешно обрабатывает сессии PHP, создайте PHP-скрипт или приложение, хранящее информацию в сессиях. В данном руководстве используется простой скрипт-счётчик: он увеличивает номер при каждой перезагрузке страницы.
На сервере web создайте файл test.php и поместите его в каталог document root.
sudo nano /var/www/html/test.php
Примечание: Если ваш каталог document root находится в другом месте, откорректируйте эту команду.
Добавьте в файл такой код:
Сохраните и закройте файл.
Чтобы получить доступ к скрипту в браузере, откройте ссылку:
Номер на странице должен увеличиваться после каждого обновления страницы.
Это значит, что теперь данные сессий хранятся в Redis. Чтобы убедиться в этом, откройте новую сессию с помощью redis-cli на сервере redis. При подключении к локальному интерфейсу IP указывать не нужно:
Укажите пароль Redis:
AUTH yourverycomplexpasswordhere
OK
Извлеките данные при помощи команды keys *:
Вы увидите новую запись PHP-сессии:
Если вы запросите значение ключа, вы увидите текущее значение счётчика:
get PHPREDIS_SESSION:2ofnvhhr6gdvp88u0c4e7kb800
«count|i:6;»
Это значит, что информация сессии хранится на сервере Redis. Аналогичным образом к серверу Redis можно подключить дополнительные веб-серверы.
Обработка сессий PHP при помощи сервера Redis в Ubuntu 14.04
Redis – это открытая нереляционное хранилище данных и кэша типа «ключ-значение». Также Redis является сервером преобразования структур данных, предназначенным для расширенной поддержки нескольких типов данных (хэша, списков, множеств и битовых массивов и т.п.). Кроме того, Redis поддерживает кластеризацию, потому его часто используют в высокопроизводительных и масштабируемых средах.
Данное руководство поможет установить и настроить сервер Redis для обработки PHP-сессий приложения в системе Ubuntu 14.04.
Обработчик сессий отвечает за хранение и извлечение данных, сохраненных в сессиях; по умолчанию PHP использует для этого файлы. Вместе с балансировщиком нагрузки обработчик сессий может быть использован для создания масштабируемой среды PHP, в которой все ноды приложения смогут подключаться к ведущему серверу для обмена данными.
Требования
Для выполнения данного руководства использовалось два сервера.
Примечание: Из соображений безопасности и производительности важно, чтобы оба сервера находились в одном центре обработки данных с включенной частной сетью.
Итак, для работы понадобится:
1: Установка Redis
Сначала нужно установить сервер Redis.
Для этого подойдёт пакет из репозитория PPA.
Важно! Используйте наиболее актуальную версию Redis.
Из соображений безопасности рекомендуется работать только с надёжными и проверенными источниками репозиториев PPA.
Чтобы добавить репозиторий PPA, введите:
sudo add-apt-repository ppa:chris-lea/redis-server
Для подтверждения нажмите Enter.
Обновите кэш пакетного менеджера:
sudo apt-get update
sudo apt-get install redis-server
Чтобы убедиться, что установка прошла успешно, введите команду:
Команда создаст подключение к Redis с локального хоста на порт 6379. Если установка прошла успешно, команда вернёт:
2: Настройка Redis для поддержки внешних соединений
По умолчанию Redis поддерживает подключения только с локального хоста. Это значит, что Redis доступен только с того сервера, на котором он установлен. Эту настройку нужно изменить.
Для начала нужно узнать IP-адрес частной сети сервера Redis.
Примечание: Следующие действия нужно выполнить на сервере redis.
Запустите команду ifconfig, чтобы получить сведения о сетевых интерфейсах.
Команда вернёт примерно следующий вывод:
eth0 Link encap:Ethernet HWaddr 04:01:63:7e:a4:01
inet addr:188.166.77.33 Bcast:188.166.127.255 Mask:255.255.192.0
inet6 addr: fe80::601:63ff:fe7e:a401/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3497 errors:0 dropped:0 overruns:0 frame:0
TX packets:3554 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4895060 (4.8 MB) TX bytes:619070 (619.0 KB)
eth1 Link encap:Ethernet HWaddr 04:01:63:7e:a4:02
inet addr:10.133.14.9 Bcast:10.133.255.255 Mask:255.255.0.0
inet6 addr: fe80::601:63ff:fe7e:a402/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:648 (648.0 B) TX bytes:578 (578.0 B)
Найдите inet_addr для интерфейса eth1; в данном случае это 10.133.14.9. Это и есть IP-адрес сети, который необходим для настройки подключения сервера web к серверу redis.
При помощи редактора откройте файл /etc/redis/redis.conf и найдите строку bind. После localhost вставьте в неё полученный IP-адрес частной сети.
sudo vim /etc/redis/redis.conf
bind localhost 10.133.14.9
Примечание: Вместо localhost строка может содержать 127.0.0.1.
Перезапустите сервис Redis, чтобы обновить настройки.
sudo service redis-server restart
После этого любой сервер из этой частной сети сможет подключиться к этому серверу Redis.
3: Пароль для сервера Redis
Чтобы повысить уровень безопасности сервера Redis, нужно защитить его данные паролем. Отредактируйте конфигурационный файл /etc/redis/redis.conf.
sudo vim /etc/redis/redis.conf
Раскомментируйте строку requirepass и установите надёжный пароль.
Перезапустите сервис Redis:
sudo service redis-server restart
4: Тестирование подключения и авторизации Redis
Чтобы убедиться в том, что все настройки работают должным образом, подключитесь к Redis с сервера redis:
Параметр host использовать необязательно, но в этой команде он присутствует для того, чтобы подтвердить, что сервис Redis может принимать соединения, направленные на частный сетевой интерфейс.
Если вы установили пароль, сервер не откроет вам доступа к данным; он вернёт ошибку AUTH:
keys *
(error) NOAUTH Authentication required.
Чтобы пройти аутентификацию, нужно запустить команду AUTH и добавить в неё установленный ранее пароль:
Если пароль правильный, команда вернёт:
Теперь снова запустите:
На экране появится примерно такой вывод:
Это значит, что на сервере Redis пока что нет никаких данных; это нормальное поведение сервера, поскольку сервер web пока что не может использовать его в качестве обработчика сессий.
Оставьте эту сессию SSH открытой и подключитесь к redis-cli. После настройки сервера web нужно будет вернуться в командную строку redis-cli, чтобы убедиться в том, что Redis может хранить данные.
5: Установка расширений Redis на сервер web
Теперь нужно перейти на сервер web и установить расширения Redis, чтобы PHP мог подключаться к серверу Redis.
Обновите кэш пакетного менеджера:
sudo apt-get update
Затем установите пакет php5-redis
sudo apt-get install php5-redis
Теперь веб-сервер может подключаться к серверу redis.
6: Настройка обработки сессий
Оставайтесь на сервере web. Откройте файл php.ini, в котором можно определить стандартный обработчик сессий PHP. Место хранения файла зависит от используемого программного стека. В стеке LAMP в Ubuntu 14.04 этот файл обычно находится в /etc/php5/apache2/php.ini. В стеке LEMP в системе Ubuntu 14.04 файл, как правило, хранится в /etc/php5/fpm/php.ini.
Если вы не знаете точного пути файла php.ini, его можно быстро узнать при помощи функции phpinfo(). Просто поместите в файл info.php следующий код:
Затем откройте скрипт в браузере и найдите строку Loaded Configuration File. В ней указано местонахождение нужного файла.
Примечание: После этого рекомендуется удалить файл info.php, поскольку он открывает доступ к конфиденциальным данным о сервере.
Откройте файл php.ini и найдите строку session.save_handler; по умолчанию она содержит значение files. Измените стандартное значение строки, указав redis.
sudo vim /etc/php5/apache2/php.ini
sudo vim /etc/php5/fpm/php.ini
Строка должна выглядеть так: session.save_handler = redis
Теперь вы должны найти строку session.save_path. Раскомментируйте ее и измените значение, указав строку подключения Redis в таком формате:
tcp://IPADDRESS:PORT?auth=REDISPASSWORD. Строка должна выглядеть так:
session.save_path = «tcp://10.133.14.9:6379?auth=yourverycomplexpasswordhere»
В параметре auth нужно указать пароль сервера Redis.
Сохраните и закройте файл, а затем перезапустите сервер php.
sudo service apache2 restart
sudo service php5-fpm restart
7: Тестирование обработки сессий
Чтобы убедиться в том, что Redis успешно обрабатывает сессии PHP, создайте PHP-скрипт или приложение, хранящее информацию в сессиях. В данном руководстве используется простой скрипт-счётчик: он увеличивает номер при каждой перезагрузке страницы.
На сервере web создайте файл test.php и поместите его в каталог document root.
sudo vim /usr/share/nginx/html/test.php
Примечание: Если ваш каталог document root находится в другом месте, откорректируйте эту команду.
Добавьте в файл такой код:
Чтобы получить доступ к скрипту в браузере, откройте ссылку:
Номер на странице должен увеличиваться после каждого обновления страницы.
Это значит, что теперь данные сессий хранятся в Redis. Чтобы убедиться в этом, вернитесь в сессию SSH на сервере redis, в которой осталось подключение к Redis при помощи redis-cli. Извлеките данные при помощи команды keys *:
На экране появится такой вывод:
Это значит, что информация сессии хранится на сервере Redis. Аналогичным образом к серверу Redis можно подключить дополнительные веб-серверы.