0

Настройка и использование Redis

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

Redis (REmote DIctionary Server) — сетевое журналируемое хранилище данных типа “ключ” — “значение” с открытым исходным кодом. По сути Redis представляет собой базу данных (как MySQL), только упрощенную и более быструю за счет отсутствия связи между данными, а также простому механизму работы с данными (подход noSql).

По принципу работы Redis схож с Memcached – данные также хранятся в оперативной памяти, доступ к данным осуществляется по ключу, однако Redis имеет ряд существенных отличий:

  • в Redis данные можно сохранять на диск, что позволяет снизить вероятность потери данных при аварийном завершении;
  • помимо хранения строк (strings), есть возможность хранить такие типы данные, как списки (lists), множества (sets), хеш-таблицы (hashes), упорядоченные множества (sorted sets).

В Redis, как и в memcached, можно указывать время жизни данных. Существует два способа — “удалить в определенный момент времени” и “удалить заданный промежуток времени”. По умолчанию все данные хранятся вечно.
Также Redis обладает одной интересной особенностью – он является однопоточным сервером.
Решение необычное, но оно имеет свои плюсы. Эта особенность обеспечивает атомарность операций, то есть Redis поддерживает транзакции (последовательное выполнение всех операций, либо ни одной), а также пакетную обработку команд (выполнение пакета команд, получение пакета результатов).
Из минусов можно было бы назвать медлительность запросов, но не в случае с Redis. Операции с данными выполняются очень быстро, в среднем можно сделать порядка 28 тысяч запросов в секунду.

Redis, за счет его высокой скорости работы, удобно использовать для хранения различных счетчиков, например, количества просмотров страниц сайта, или же каких-либо временных данных. Достаточно распространено хранение кеша сайта, хранение PHP-сессий.

Пример хранения PHP-сессии в Redis

В первую очередь нужно включить 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

Либо включить опцию в разделе “Сайты“, вышеописанные опции в таком случае будут применены к сайту автоматически:

Также включить хранение сессий в redis’е можно сразу для всех сайтов:

Если на момент включения опции микросервис Redis отключен – он будет включен автоматически, с минимальным тарифом 2р./сутки. Клиентам выделенных серверов 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 с целью кеширования данных в самых распространенных CMS.

Подключение Redis к WordPress

Для подключения Redis к CMS WordPress в первую очередь необходимо добавить нужные директивы в конфигурационный файл wp-config.php.
Сделать это можно через Файловый менеджер.
Открываем директорию сайта и нажимаем Править на нужном файле, в нашем случае это wp-config.php.

В открывшемся окне добавляем в начало файла, как показано на снимке экрана ниже, и строго после первой строки с `<?php` следующие строки:

define('WP_CACHE_KEY_SALT', 'my-site.com_');
define('WP_CACHE', true);

Где ‘my-site.com_’ – имя вашего сайта, или уникальный префикс для хранения данных в Redis, что важно при использовании Redis для нескольких сайтов.
После чего нажимаем “Сохранить”:

Теперь нужно зайти в административную часть сайта. 

В качестве примера рассмотрим домен my-site.com, в этом случае ссылка будет следующая: http://my-site.com/wp-login.php или http://my-site.com/wp-admin.
В административной панели следует выбрать пункт меню Плагины, затем подпункт Добавить новый.

На открывшейся странице ввести в поле поиска плагинов Redis.

Затем нажать “Установить” в окне плагина “Redis Object Cache”, после чего появится сообщение об успешной установке плагина:

Затем следует перейти в раздел Плагины, подраздел Установленные, и активировать плагин.

Открыть настройки плагина – кнопка settings.

И включить.

После чего появится сообщение о том, что WordPress подключен к Redis:

Готово, плагин установлен и активирован, сайт полноценно работает с Redis.
Проверяем, что данные действительно пишутся в Redis:

127.0.0.1:6379> keys my-site.com*
 1) "my-site.com_wp_user_meta:1"
 2) "my-site.com_wp_:post_tag_relationships:1"
 3) "my-site.com_wp_:transient:is_multi_author"
 4) "my-site.com_wp_:category:1"
 5) "my-site.com_wp_site-transient:update_core"
 6) "my-site.com_wp_:transient:twentyfifteen_categories"
 7) "my-site.com_wp_userslugs:testtest"
 8) "my-site.com_wp_:widget:widget_recent_comments"
 9) "my-site.com_wp_:transient:plugin_slugs"
10) "my-site.com_wp_useremail:test@test.test"
11) "my-site.com_wp_:posts:last_changed"
12) "my-site.com_wp_:options:alloptions"
13) "my-site.com_wp_:terms:last_changed"
14) "my-site.com_wp_:posts:1"
15) "my-site.com_wp_users:1"
16) "my-site.com_wp_:posts:wp_get_archives:53058f6b83972cfc3253e30ef06fcaa9:0.660622001447243344"
17) "my-site.com_wp_:post_meta:1"
18) "my-site.com_wp_userlogins:testtest"
19) "my-site.com_wp_site-transient:theme_roots"
20) "my-site.com_wp_:category_relationships:1"
21) "my-site.com_wp_:default:is_blog_installed"
22) "my-site.com_wp_:terms:get_terms:eccb28b0f03fa3589e317f658d286d32:0.661676001447243344"
23) "my-site.com_wp_:widget:widget_recent_posts"
24) "my-site.com_wp_:options:notoptions"
25) "my-site.com_wp_:terms:get_terms:28955b20311515a81c5f5c1ff65448e7:0.661676001447243344"
26) "my-site.com_wp_site-transient:update_plugins"
27) "my-site.com_wp_site-transient:update_themes"
28) "my-site.com_wp_:post_format_relationships:1"

Сделаем тест производительности с помощью утилиты Siege.
Результаты с отключенным Redis:

Transactions:              10638 hits
Availability:             100.00 %
Elapsed time:             359.85 secs
Data transferred:          27.66 MB
Response time:              0.16 secs
Transaction rate:          29.56 trans/sec
Throughput:                 0.08 MB/sec
Concurrency:                4.85
Successful transactions:    8448
Failed transactions:           0
Longest transaction:       64.71
Shortest transaction:       0.05

Результаты с подключенным Redis:

Transactions:              11849 hits
Availability:             100.00 %
Elapsed time:             359.95 secs
Data transferred:          30.89 MB
Response time:              0.11 secs
Transaction rate:          32.92 trans/sec
Throughput:                 0.09 MB/sec
Concurrency:                3.49
Successful transactions:    9458
Failed transactions            0
Longest transaction:        5.11
Shortest transaction:       0.05

Видим, что время по самой долгой транзакции уменьшилось, а количество обращений к серверу, в свою очередь, наоборот увеличилось.

Подключение Redis к Joomla

Для подключения Redis к CMS Joomla в первую очередь необходимо зайти в административную часть сайта:
http://my-site.com/administrator/.

В 3-ей ветке версии CMS Joomla уже есть возможность подключить хранение кеша в Redis.
Для включения в административной панели следует выбрать пункт меню Система, затем подпункт Общие настройки.

На открывшейся странице выбираем пункт меню Система.

Устанавливаем значение “кеш” в Стандартное кеширование.
Значение “обработчик кеширования” в Redis.
Остальные настройки подходят по умолчанию.

Сохраняем настройки.

Можно убедится, что данные теперь пишутся в Redis:

127.0.0.1:6379> keys *
1) "0b4e10cc3e67426df1caf69c3c0a8bc5-cache-_system-929adb9b368342c818ec393fb978a452"
2) "0b4e10cc3e67426df1caf69c3c0a8bc5-cache-mod_banners-e0e3e665a6ca401f75ee3e303709d106"
3) "0b4e10cc3e67426df1caf69c3c0a8bc5-cache-com_modules-569e6c47757760810bca0248ddf06827"
4) "0b4e10cc3e67426df1caf69c3c0a8bc5-cache-mod_menu-4e418acf0564bb68644330ec4571a4b1"
5) "f2742362a55de6e5aed0368990e6cb83-cache-mod_menu-417ea3f772f82269c74fd5192e9361e9"
6) "0b4e10cc3e67426df1caf69c3c0a8bc5-cache-com_languages-d5b1f17e45f67b7b5187f3a249a371d1"
7) "0b4e10cc3e67426df1caf69c3c0a8bc5-cache-mod_menu-e2577430251bc8a2d5fcbc24e2824f56"
8) "f2742362a55de6e5aed0368990e6cb83-cache-com_templates-227cec74b683e80b728884721655a1d6"
9) "0b4e10cc3e67426df1caf69c3c0a8bc5-cache-com_plugins-31f5657c977a543483097846ff8d47fd"

С помощью утилиты Siege проверяем, как изменилась скорость работы сайта.
Результаты с отключенным Redis:

Transactions:               8165 hits
Availability:             100.00 %
Elapsed time:             359.51 secs
Data transferred:          27.84 MB
Response time:              0.33 secs
Transaction rate:          22.71 trans/sec
Throughput:                 0.08 MB/sec
Concurrency:                7.46
Successful transactions:    8165
Failed transactions:           0
Longest transaction:       54.82
Shortest transaction:       0.07

Результаты с включенным Redis:

Transactions:               9442 hits
Availability:             100.00 %
Elapsed time:             359.39 secs
Data transferred:          28.89 MB
Response time:              0.24 secs
Transaction rate:          23.49 trans/sec
Throughput:                 0.08 MB/sec
Concurrency:                7.85
Successful transactions:    9442
Failed transactions:           0
Longest transaction:        8.68
Shortest transaction:       0.05

Из всего вышесказанного можно сделать вывод, что Redis является прекрасным инструментом для работы с данными и в умелых руках может существенно улучшить производительность сайта.

Свежие комментарии

Подписка

Лучшие статьи

Рубрики

Популярное

Previous Story

Настройка и использование Memcached

Next Story

Настройка простого беспроводного репитера на устройстве MikroTik

Latest from Blog

Игра системный администратор

docker run -p 8080:8080 -p 3390:3389 –name play-adobe-flash-after-eol jchprj/play-adobe-flash-after-eolзайти localhost:8080, и открыть эту страницу, или https://serveradmin.ru/files/sysadmin.swf

Что делать, когда на сервере кончаются файловые дескрипторы (inode)

Нередки случаи, когда причиной проблем на сервере становится переполнение файловых дескрипторов (inode). Симптомы точно такие же, как при переполнившемся диске, только вот диск при этом может оказаться свободным. Количество inode каждой файловой системы определяется при разворачивании ОС.

CI/CD для начинающих: деплой React-приложения

Следующий шаг после разработки веб-приложения — размещение его на сервере. Независимо от сложности проекта или используемой инфраструктуры, общий процесс остается одинаковым: нужно «упаковать» код в CI/CD-конвейер и отправить на сервер. В тексте рассмотрим,

Настройка iptables в Linux от Selectel

Рассмотрим использование наиболее популярного в дистрибутивах Linux межсетевого экрана iptables. Эта инструкция — часть курса «Введение в сетевую безопасность». Смотреть весь курс Рассмотрим использование наиболее популярного в дистрибутивах Linux межсетевого экрана iptables

nginx и apache на одном сервере

В этом руководстве мы рассмотрим процедуру установки и настройки работы двух web-серверов с целью использования преимуществ каждого из них, где Nginx – как frontend и Apache – как backend. Установка и настройка
Go toTop