В данной статье мы рассмотрим Redis – сетевое журналируемое хранилище данных типа "ключ-значение" с открытым исходным кодом. Redis, по сути, является базой данных, которая упрощена и работает быстрее, чем MySQL за счет отсутствия связи между данными и простого механизма работы с данными в подходе NoSQL.
Redis работает по принципу хранения данных в оперативной памяти и доступа к данным по ключу. В Redis данные можно сохранять на диск, что позволяет снизить вероятность их потери при аварийном завершении. Кроме того, Redis поддерживает не только хранение строк, но и списков, множеств, хэш-таблиц и упорядоченных множеств.
Redis позволяет указывать время жизни данных. Это можно сделать двумя способами: "удалить в определенный момент времени" и "удалить через заданный промежуток времени". По умолчанию в Redis все данные хранятся вечно.
Одна из интересных особенностей Redis состоит в том, что он является однопоточным сервером.
Предложенное решение имеет свои достоинства, которые проявляются в обеспечении атомарности операций. Благодаря этому Redis поддерживает транзакции, то есть последовательное выполнение всех операций или их отсутствие. Кроме того, Redis позволяет выполнять пакетную обработку команд, что позволяет получить пакет результатов. Redis обладает высокой скоростью работы и дает возможность выполнить порядка 28 тысяч запросов в секунду.
Redis удобен для хранения различных счетчиков, например, количества просмотров страниц сайта, а также временных данных. В частности Redis широко используется для хранения кэша сайта и PHP-сессий благодаря своей высокой скорости работы.
Пример использования Redis для хранения PHP-сессии
Для работы с Redis в первую очередь необходимо включить его в качестве сервиса. У нас это можно сделать в Панели Управления аккаунтом в разделе "Сервисы". По умолчанию сессии хранятся в файлах, что можно увидеть в разделе "session", вызвав PHP-функцию phpinfo().
Однако доступ к файлам происходит медленнее, чем к оперативной памяти. Поэтому для более эффективного хранения сессий можно настроить Redis.
Redis периодически сохраняет данные на диск, что предотвращает их потерю. Если Redis станет недоступен по какой-либо причине, хранение сессий автоматически переключится на файловое хранилище.
Для включения хранения сессий в Redis необходимо добавить следующие строки в файл .htaccess, который обычно находится в корневой директории вашего проекта. Если такого файла нет, то его нужно создать.
php_value session.save_handler "redis"
php_value session.save_path "tcp://127.0.0.1:6379"
Первая строка определяет имя обработчика хранения сессий, а вторая – путь для хранения сессий. Redis работает как демон на стандартном порту, поэтому указываем протокол tcp, адрес 127.0.0.1 и порт для подключения 6379.
Также в Панели управления Beget можно включить опцию в разделе "Сайты", в таком случае вышеописанные опции будут применены к сайту автоматически.
Кроме того, можно включить хранение сессий в Redis сразу для всех сайтов.
Кроме того, можно включить хранение сессий в Redis сразу для всех сайтов.
Если в момент включения опции микросервис Redis отключен, он будет включен автоматически, по минимальному тарифу это будет стоить 1 рубль в сутки. Клиентам выделенных серверов Redis предоставляется без дополнительной платы.
После включения опции в phpinfo можно увидеть, что сессии хранятся в Redis.
Чтобы проверить результат, можно использовать тестовый скрипт, который создаст сессию:
<?php
session_start();
$count = isset($_SESSION['count']) ? $_SESSION['count'] : 1;
echo $count; $_SESSION['count'] = ++$count;
Далее делаем к скрипту запрос:
ktulhu@ktulhu-H55M-S2V:~$ curl -I 'http://test50.bget.ru/test.php'
HTTP/1.1 200 OK
Server: nginx/1.9.5
Date: Wed, 11 Nov 2015 11:10:16 GMT
Content-Type: text/html
Connection: keep-alive
Keep-Alive: timeout=30
Vary: Accept-Encoding
X-Powered-By: PHP/5.4.45
Set-Cookie: PHPSESSID=a902879490d11cb23e07e34cf303528f; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Теперь подключаемся к Redis, чтобы убедиться, что сессия была сохранена:
test50@tor:~$ redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
1) "PHPREDIS_SESSION : a902879490d11cb23e07e34cf303528f"
Подключение Redis к WordPress
Для интеграции Redis с CMS WordPress необходимо сначала внести изменения в конфигурационный файл wp-config.php. Это можно сделать через файловый менеджер, открыв директорию сайта, нажав правую кнопку мыши на файле wp-config.php и выбрав пункт "Правка".
В открывшемся окне следует добавить строки в начало файла (как показано ниже). Важно указать уникальный префикс для хранения данных в Redis, если он используется для нескольких сайтов.
define('WP_REDIS_CLIENT', 'predis');
define('WP_REDIS_SENTINEL', '');
define('WP_REDIS_SERVERS', 'tcp://127.0.0.1:6379');
define('WP_REDIS_PASSWORD', '');
define('WP_REDIS_DATABASE', '0');
define('WP_CACHE_KEY_SALT', 'my-site.com_');
После этого следует сохранить изменения и зайти в административную часть сайта. Для примера рассмотрим домен my-site.com, в этом случае ссылка будет следующей: http://my-site.com/wp-login.php или http://my-site.com/wp-admin. В административной панели нужно выбрать пункт меню "Плагины", затем "Добавить новый", найти и установить плагин "Redis Object Cache", а затем активировать его и включить настройки плагина. Когда WordPress успешно подключен к Redis, сайт будет работать с этой системой кэширования. Проверить работу Redis можно с помощью тестирования производительности посредством утилиты Siege. Результаты теста показывают, что время выполнения самой долгой транзакции уменьшилось, но количество обращений к серверу увеличилось.
На странице общих настроек выбираем пункт меню "Система". Устанавливаем стандартное кэширование для значения "кэш", а для значения "обработчик кэширования" выбираем Redis. Остальные настройки оставляем по умолчанию и сохраняем изменения. Теперь можно убедиться, что данные сохраняются в Redis. Для проверки скорости работы сайта используем утилиту Siege.
Сравнивая результаты до и после включения Redis, можно сделать вывод о том, что он является великолепным инструментом для работы с данными, который может существенно повысить производительность сайта, если использовать его правильно.