Redis — всё по этой теме для программистов

Оглавление (нажмите, чтобы открыть):

Базы данных: Redis

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

Redis — быстрая база данных вида ключ-значение, хранящая данные в памяти. Скорость работы достигается ценой надёжности хранения данных. Но об этом позже.

Данные

Redis хранит не только строки, но и кучу других типов данных: списки, множества, упорядоченные множества, словари и битмапы. Каждую пару ключ-значение можно сделать временной, задав ей ttl, тогда через заданное время запись самоуничтожится.

Данные хранятся очень просто: нет ни связей, ни индексов, ничего. Если что-то нужно, придется реализовать это самим. Redis — это простой инструмент.

Хранение

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

Этого можно избежать, включив режим AOF. Тогда каждая команда от клиента сперва будет записываться в лог на диске, что позволит потом восстановить все данные. Цена за это — резкая деградация производительности: иногда скорость может упасть в 10 раз.

Обычно Redis не использует AOF, а вместо этого в фоне сохраняет данные на диск. Есть возможность настроить то, как часто будут сохранятся данные по времени и количеству изменений.

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

Еще несколько полезных вещей, которые умеет Redis.

Транзакции
Как и все остальное, реализованы просто и обеспечивают атомарное выполнение набора команд. Изоляции нет, но в Redis она и не нужна, так как Redis — однопоточное приложение, и транзакции не выполняются параллельно.

Репликация
Реализована как master-slave: на мастер можно писать и читать, слейвы — только чтение. Настраивается легко, работает безотказно.

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

Узнать больше

Redis — маленькая, но быстрая база данных для хранения данных, которые не жалко потерять: счетчики, временные данные. Сегодня ее часто можно встретить в самых разных проектах.

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

Redis — быстрая база данных вида ключ-значение, хранящая данные в памяти. Скорость работы достигается ценой надёжности хранения данных. Но об этом позже.

Данные

Redis хранит не только строки, но и кучу других типов данных: списки, множества, упорядоченные множества, словари и битмапы. Каждую пару ключ-значение можно сделать временной, задав ей ttl, тогда через заданное время запись самоуничтожится.

Данные хранятся очень просто: нет ни связей, ни индексов, ничего. Если что-то нужно, придется реализовать это самим. Redis — это простой инструмент.

Хранение

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

Этого можно избежать, включив режим AOF. Тогда каждая команда от клиента сперва будет записываться в лог на диске, что позволит потом восстановить все данные. Цена за это — резкая деградация производительности: иногда скорость может упасть в 10 раз.

Обычно Redis не использует AOF, а вместо этого в фоне сохраняет данные на диск. Есть возможность настроить то, как часто будут сохранятся данные по времени и количеству изменений.

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

Еще несколько полезных вещей, которые умеет Redis.

Транзакции
Как и все остальное, реализованы просто и обеспечивают атомарное выполнение набора команд. Изоляции нет, но в Redis она и не нужна, так как Redis — однопоточное приложение, и транзакции не выполняются параллельно.

Репликация
Реализована как master-slave: на мастер можно писать и читать, слейвы — только чтение. Настраивается легко, работает безотказно.

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

Узнать больше

Redis — маленькая, но быстрая база данных для хранения данных, которые не жалко потерять: счетчики, временные данные. Сегодня ее часто можно встретить в самых разных проектах.

Стартуем работу с Redis и PHP

Rdis — сетевое журналируемое хранилище данных типа “ключ — значение” с открытым исходным кодом. Как правило, данное программное средство используется как нереляционная высокопроизводительная СУБД. В ней можно хранить строки, хэши, списки и многое другое.

Об этой статье

Данная статья не является руководством по работе с Redis (для этого можете посетить официальный сайт). В данной статье мы рассмотрим как связать Redis и PHP.

Установка Redis

Процесс установки абсолютно не вызывает трудностей. Просто следуйте инструкциям, изложенным на официальном сайте.

Установка Redis на Linux

Для установке Redis на Linux вам потребуется TCL. Запустите команду:

$ sudo apt-get install tcl

Для установки Redis:

$ wget http://download.redis.io/releases/redis-2.8.19.tar.gz
$ tar xzf redis-2.8.19.tar.gz
$ cd redis-2.8.19
$ make

Заметка: значение 2.8.19 замените на номер текущей стабильной версии.

Все бинарные файлы будут сохранены в каталоге SRC. Для запуска сервера:

Установка Redis на Windows

Для установки Redis на Windows просто скачайте последний пакет и следуйте инструкциям.

Установите Predis — клиент для PHP. Для этого скопируйте его с GitHub в папку с проектом:

$ git clone git://github.com/nrk/predis.git

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

Для начала подключаем автозагрузчик Redis. Затем помещаем код в блок try/catch. Подключение к локальному Redis выглядит несколько иначе, чем к удалённому.

Теперь, когда подключение произошло, можем приступать к работе с Redis.

Типы данных в Redis

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

  • Строка: обычные наборы символов.
  • Список: линейный массив.
  • Хэш-таблицы: ассоциативные массивы.
  • Множества: набор уникальных значений.
  • Упорядоченные множества: множества упорядоченные по параметру “score”.

Есть ещё и другие типы данных, такие как битмапы и иероглифы, но их мы рассматривать не будем.

Геттеры и сеттеры

При работе с Redis нужно знать три основные команды: SET , GET и EXISTS . Они используются чтобы проверить наличие/отправить и получить данные от Redis. К примеру:

Инкремент и декремент

INCR и DECR — это команды, использующиеся для увеличения и уменьшения значения.

Для увеличения/уменьшения более чем на 1, можете воспользоваться командами INCRBY и DECRBY .

Работа с списками

Для работы со списками вам понадобятся команды:

  • LPUSH: помещает элемент в начало списка
  • RPUSH: помещает элемент в конец списка
  • LPOP: извлекает первый элемент из списка
  • RPOP: извлекает последний элемент из списка
  • LLEN: получение размерности списка
  • LRANGE: получение нескольких элементов списка

Просто использование списков:

Работа с хэш-таблицами

Как уже упоминалось, данный тип можно сопоставить с ассоциативными таблицами. Команды:

  • HSET: установка элемента ключ-значение
  • HGET: извлечение элемента ключ-значение
  • HGETALL: извлечение всех элементов
  • HMSET: установка нескольких элементов ключ-значение
  • HDEL: Удаление элемента по ключу
  • HINCRBY: увеличить элемент ключ-значение.

Работа с множествами

Список команд: – SADD : добавление числа N ключу – SREM : удаление числа N ключу – SISMEMBER : проверка существование значения – SMEMBERS : набор всех значений.

Работа с упорядоченными множествами

Поскольку Redis хранит данные в памяти, то они не могут располагаться там вечно. Поэтому нам понадобится возможность установить EXPIRE , EXPIREAT , TTL , PERSIST – EXPIRE : время истечения срока хранения в секундах, после чего элемент будет удалён – EXPIREAT : истечение срока unix timestamps – TTL : получить значение оставшегося времени – PERSIST : сброс истечения срока.

Мы рассмотрели лишь самые необходимые команды. Все остальные можно найти на сайте Redis.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: https://scotch.io/tutorials/getting-started-with-redis-in-php
Перевел: Станислав Протасевич
Урок создан: 24 Апреля 2015
Просмотров: 52653
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Использование 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 отключен — он будет включен автоматически, с минимальным тарифом 1р./сутки. Клиентам выделенных серверов 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«, после чего появится сообщение о успешной установке плагина:

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

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

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

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

В открывшемся окне добавляем в начало файле следующие строки:

define(‘WP_CACHE_KEY_SALT’, ‘my-site.com’);
define(‘WP_CACHE’, true);
Где my-site.com — имя вашего сайта.
После чего нажимаем «Сохранить«.

Готово, сайт полноценно работает с 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 является прекрасным инструментом для работы с данными и в умелых руках может существенно улучшить производительность сайта.

Удачной работы! Если возникнут вопросы — напишите нам, пожалуйста, тикет из Панели управления аккаунта, раздел «Помощь и поддержка«.

Установка и настройка Redis

Redis (REmote DIctionary Server) — это нереляционная высокопроизводительная СУБД, сетевое хранилище данных типа «ключ — значение».

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

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

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

Изначально установку Redis сервера рекомендуется проводить из репозиториев используемой операционной системы. Предполагается, что последующие команды будут выполняться от имени пользователя root или при использование sudo (если Вы авторизованы не от пользователя root, рекомендуем выполнить sudo su).

Установка на DEB дистрибутивы (Ubuntu/Debian)

Сначала выполним обновление пакетов:

После чего непосредственно выполнив установку Redis сервера:

После завершения установки проверим работу установленного сервиса:

В случае успешной установки в ответ придет текст — PONG, если сервис не установился или не запустился, на экран будет выведена ошибка, о невозможности подключится к сервису или отсутствии команды redis-cli .

Если Redis сервер установлен и запустился, то он будет ожидать подключение на локальном интерфейсе 127.0.0.1 (localhost), порт стандартный — 6379.

Установка на RHEL (CentOS/BitrixOS)

Процесс установки почти не отличается от установки на Debian дистрибутивы. Сначала обновляем пакеты:

Выполняем установку Redis сервера:

Запускаем сервис и добавляем его в автозагрузку:

После чего проверим его работу:

В независимости от используемого дистрибутива Вы всегда можете установить последнюю версию Redis сервера, собрав её из исходных кодов по инструкции с официального сайта проекта Redis:

Настройка Redis

Для Ubuntu и Debian основной конфигурационный файл Redis сервера Вы найдете по пути /etc/redis/redis.conf, в CentOS (а также BitrixOS) конфигурация располагается в файле /etc/redis.conf.

Наиболее интересным будет параметр maxmemory , он задает ограничение использования оперативной памяти для хранения данных в Redis. По умолчанию Redis может использовать всю доступную память сервера, поэтому если сервер не обладает достаточным количеством постоянно свободной памяти (Вы можете просмотреть информацию о используемой памяти командой free -m ), то стоит задать этот параметр. Самым простым решением для выбора максимального объема памяти будет разделить среднее значение нескольких показаний свободной памяти ( free -m ) пополам.

Например, в течение часа показатели free -m были следующими:

Средним показателем для свободной памяти (столбец free) будет 187 ((204+188+169)/3=187), поэтому ограничим maxmemory в 180 Мб. Для этого откроем файл redis.conf, найдем строку “ # maxmemory ”: и заменим её указав нужное значение:

Также в данном файле стоит обратить внимание на следующие параметры:

  • maxclients — количество разрешенных клиентов;
  • tcp-backlog — количество соединений которые могут находится в очереди, если все возможные соединения заняты;
  • save условия, при которых данные будут записываться на диск. Данные Redis хранятся в оперативной памяти и в зависимости от значений save сохраняются на диск, что замедляет производительность, но повышает надежность хранения данных. Условию save передается два значение: количество секунд и количество изменений, если за указанное количество происходит указанное количество изменений, то данные будут сохранены на диск. По умолчанию параметры выглядят так:

save 900 1 — сохранить, если за 900 секунд будет хотя бы одно изменение;

save 300 10 — сохранить, если за 300 секунд будет хотя бы 10 изменений;

save 60 10000 — сохранить, если за 60 секунд будет 10000 и более изменений.

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

После внесения каких-либо изменений в конфигурационный файл Redis необходимо перезапустить.

Заключение

Теперь Вы знаете, как правильно устанавливать и настраивать Redis. Больше информации о конфигурации Redis сервера Вы можете получить из его документации:

Redis: репликация, часть 2 — Master-Slave репликация, и Redis Sentinel

Продолжение серии по Redis репликации.

Собственно, вся история началась с того, что мы решили избавиться от memcached .

На данный момент у нас на серверах запущены и memcahced , и Redis.

И memcached , и Redis работают как standalone приложения на разных сервера, т.е. их инстансы никак не связаны друг с другом, из-за чего возникает проблема:

  • есть три хоста бекенда, которые расположены за AWS Applcation Load balancer
  • на ALB включены Sticky Sessions , но они работают через cookies, которые игнорируются нашими мобильными приложениями (iOS/Android)
  • соответственно, когда клиент обращается к бекенду — иногда он может получить закешированные данные, которые уже были удалены на другом инстансе memcached или Redis

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

Сейчас проблема решается с помощью костылей на бекенде, который перепроверяет данные, а что бы избавиться от этого — решили:

  1. избавиться от memcached вообще, т.к. Redis может выполнять те же функции, которые сейчас выполняет memcached
  2. настроить репликацию данных Redis между всеми хостами

Настройка такой репликации и описывается в этом посте.

Сначала — базовая, и второй пример — с Sentinel.

Запускать будем на AWS EC2 инстансах с Debian 9.

Для работы с сервисами используем три домена — redis-0.setevoy.org.ua для мастера, redis-1.setevoy.org.ua и redis-2.setevoy.org.ua для двух слейвов.

Слейв в минимальном сетапе может быть и один, но т.к. второй сетап будет с Sentinel — то создадим сразу три инстанса.

Мастер Йода рекомендует:  Администраторы Википедии закрыли доступ для жителей Катара

Базовая Master-Slave репликация

В этом варианте слейвы являются read-only репликами мастера, поддерживая у себя ту же информацию, которая добавляется на мастер.

Мастер шлёт на слейвы все изменения, которые выполняются в данных — записи клиентов, обновления ключей и т.д.

В случае, если связь между мастером и слейвом обрывается — слейв пытается подключиться к мастеру и выполнить частичную сихронизацию, обновив данные с того места, на котором произошёл (« Ни единого разрыва! « (с)) обрыв связи.

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

Несколько нюансов такой репликации:

  • один мастер может иметь несколько слейвов
  • слейвы могут принимать подключения от других слейвов, создавая таким образом «каскад» реплицированных нод — от мастера «вверху», слейвов «в середине» и слейвов «внизу»
  • категорически рекомендуется использовать persistence на мастере и слейвах во избежание потери данных, см. Safety of replication when master has persistence turned off
  • слейвы по умолчанию работают в read-only режиме, см. Read-only slave

Настройка Redis Master

Редактируем /etc/redis/redis.conf , в bind задаём прослушивание всех интерфейсов:

Можно указать IP через пробел, например:

Другие интересные тут опции:

  • port 6379 — понятно
  • slave-read-only yes — слейвы принимают запросы только на read, на мастере роли не играет
  • requirepass foobared — мастер требует авторизацию с паролем foobared
  • appendonly yes и appendfilename «appendonly.aof» — уменьшаем вероятность потери последних данных, см. Redis Persistence

Проверяем, передавая с помощью опции -a пароль:

Redis

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

Что такое Redis?

Redis (расшифровывается как Remote Dictionary Server) – это быстрое хранилище данных типа «ключ‑значение» в памяти с открытым исходным кодом для использования в качестве базы данных, кэша, брокера сообщений или очереди. Проект возник, когда Сальваторе Санфилиппо, первоначальный разработчик Redis, пытался улучшить масштабируемость стартапа в Италии. Redis обеспечивает время отклика на уровне долей миллисекунды и позволяет приложениям, работающим в режиме реального времени, выполнять миллионы запросов в секунду. Такие приложения востребованы в сфере игр, рекламных технологий, финансовых сервисов, здравоохранения и IoT. Redis широко применяется для кэширования, управления сеансами, разработки игр, создания таблиц лидеров, аналитики в режиме реального времени, работы с геопространственными данными, поддержки служб такси, чатов и сервисов обмена сообщениями, потоковой передачи мультимедиа и приложений с отправкой сообщений по модели «издатель – подписчик» (Pub/Sub).

*Новая публикация в блоге*: Redis Cluster 101

Как работает Redis?

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

Сравнение Redis и MemCached

Как Redis, так и MemCached представляют собой хранилища данных в памяти с открытым исходным кодом. Высокопроизводительный сервис кэширования с распределенной памятью Memcached отличает простота, а Redis обладает широкими функциональными возможностями, которые позволяют эффективно использовать хранилище для разнообразных целей. Подробное сравнение функций, которое поможет вам принять решение, см. по ссылке Сравнение Redis и Memcached. Они используются с реляционными базами данных или базами данных на основе пар «ключ – значение», такими как MySQL, Postgres, Aurora, Oracle, SQL Server, DynamoDB и многими другими, для повышения производительности.

Новые возможности в Redis 5.0

Redis 5, а теперь уже Redis 5.0.3, – это последняя общедоступная версия Redis с открытым исходным кодом. С момента первого выпуска в 2009 г. система Redis с открытым исходным кодом превратилась из технологии кэширования в простое в использовании и быстрое хранилище данных в памяти с универсальными структурами данных и временем отклика на уровне долей миллисекунды. Главной вехой для Redis стал выпуск версии 5.0, в которую вошел целый ряд улучшений и усовершенствований. Основным нововведением стало внедрение функции Streams – первой совершенно новой структуры данных в Redis после HyperLogLog. В этом выпуске также добавлены команды для структур данных Sorted Set и новые возможности для API модуля.

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

Преимущества Redis

Хранилище данных в памяти

Все данные Redis находятся в основной памяти сервера, в отличие от таких баз данных, как PostgreSQL, Cassandra, MongoDB и других, которые большую часть данных хранят на магнитных дисках или SSD‑накопителях. По сравнению с традиционными дисковыми базами данных, требующими циклического обращения к диску для большинства операций, хранилища данных в памяти, такие как Redis, свободны от этого ограничения. Благодаря этому многократно увеличивается количество выполняемых операций и сокращается время отклика. В результате обеспечивается чрезвычайно высокая производительность. Операции чтения или записи в среднем занимают менее миллисекунды, скорость работы достигает миллионов операций в секунду.

Гибкие структуры данных

В отличие от упрощенных хранилищ на основе пар «ключ – значение», которые поддерживают ограниченный набор структур данных, Redis поддерживает огромное разнообразие структур данных, позволяющее удовлетворить потребности разнообразных приложений. Типы данных Redis включают:

  • строки – текстовые или двоичные данные размером до 512 МБ;
  • списки – коллекции строк, упорядоченные в порядке добавления;
  • множества – неупорядоченные коллекции строк с возможностью пересечения, объединения и сравнения с другими типами множеств;
  • сортированные множества – множества, упорядоченные по значению;
  • хэш‑таблицы – структуры данных для хранения списков полей и значений;
  • битовые массивы – тип данных, который дает возможность выполнять операции на уровне битов;
  • структуры HyperLogLog – вероятностные структуры данных, служащие для оценки количества уникальных элементов в наборе данных.

Простота и удобство

Redis упрощает код, позволяя писать меньше строк для хранения, использования данных и организации доступа к данным в приложениях. К примеру, если приложение содержит данные, хранящиеся в хэш‑таблице, и требуется сохранить эти данные в хранилище, можно просто использовать структуру данных хэш‑таблицы Redis. Решение подобной задачи с использованием хранилища данных, не поддерживающего структуры хэш‑таблиц, потребует написания серьезного объема кода для преобразования данных из одного формата в другой. Redis уже оснащен встроенными структурами данных и предоставляет множество возможностей их комбинирования и взаимодействия с данными клиента. Разработчикам под Redis доступны более ста клиентов с открытым исходным кодом. Поддерживаемые языки программирования включают Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go и многие другие.

Репликация и постоянное хранение

В Redis применяется архитектура узлов «ведущий‑подчиненный» и поддерживается асинхронная репликация, при которой данные могут копироваться на несколько подчиненных серверов. Это обеспечивает как улучшенные характеристики чтения (так как запросы могут быть распределены между серверами), так и ускоренное восстановление в случае сбоя основного сервера. Для обеспечения постоянного хранения Redis поддерживает снимки состояния на момент времени (копирование наборов данных Redis на диск).

Высокая доступность и масштабируемость

Redis предлагает архитектуру «ведущий‑подчиненный» с одним ведущим узлом или с кластерной топологией. Это позволяет создавать высокодоступные решения, обеспечивающие стабильную производительность и надежность. Если требуется настроить размер кластера, доступны различные варианты вертикального и горизонтального масштабирования. В результате можно наращивать кластер в соответствии с потребностями.

Возможность расширения

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

Использование 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 отключен — он будет включен автоматически, с минимальным тарифом 1р./сутки. Клиентам выделенных серверов Redis предоставляется без дополнительной платы.

После включении опции, в phpinfo, можно наблюдать что сессии хранятся в Redis:

Мастер Йода рекомендует:  TypeScript — всё по этой теме для программистов

Проверим результат с помощью тестового скрипта, который создает сессию:

Делаем запрос к скрипту:

Подключаемся к 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«, после чего появится сообщение о успешной установке плагина:

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

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

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

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

В открывшемся окне добавляем в начало файле следующие строки:

define(‘WP_CACHE_KEY_SALT’, ‘my-site.com’);
define(‘WP_CACHE’, true);
Где my-site.com — имя вашего сайта.
После чего нажимаем «Сохранить«.

Готово, сайт полноценно работает с 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 является прекрасным инструментом для работы с данными и в умелых руках может существенно улучшить производительность сайта.

Удачной работы! Если возникнут вопросы — напишите нам, пожалуйста, тикет из Панели управления аккаунта, раздел «Помощь и поддержка«.

Альтернативы для замены Redis

MongoDB

MongoDB — это база данных документов с масштабируемостью и гибкостью, которая вам нужна, с необходимыми запросами и индексированием.

Бесплатная Открытый код Mac Windows Linux Интернет BSD

Hazelcast

Hazelcast — это сетка данных с открытым исходным кодом, основанная на Java. Если несколько узлов образуют кластер, данные равномерно распределяются между узлами. Это обеспечивает горизонтальную масштабируемость и достижение максимальной скорости вычисления. Резервные копии также распределяются аналогично другим узлам на основе конфигурации, тем самым защищая от сбоя

Бесплатная Открытый код Mac Windows Linux

Что в этом списке?

В списке находится программы которые можно использовать для замены Redis на платформах Windows, Mac, Linux, Self-Hosted. Этот список содержит 2 приложений, похожих на Redis.

Redis — всё по этой теме для программистов

Redis был разработан в 2009 году и представляет собой хранилище типа ключ-значение. Следуя опыту таких NoSQL баз данных, как Cassandra, CouchDB и MongoDB, Redis позволяет хранить большой объем данных без ограничений реляционных баз данных. Также его часто сравнивают с memcache, он находит применение в качестве БД для кеширования.

Настройка

Перед установкой Redis следует учесть пару нюансов. Для начала обновим пакеты apt-get:

По завершению процесса, установим компилятор с зависимыми пакетами, при помощи которого мы и установим Redis из исходного кода:

Наконец, скачает tcl:

Установка Redis

После необходимой подготовки, мы готовы приступить к установке Redis из исходников:

Далее выполните команду make :

Рекомендуется провести тест сборки:

По завершению установки, мы получим Redis со встроенным скриптом для запуска сервера в качестве службы. Для доступа к скрипту перейдите в каталог utils :

Запустите скрипт из этого каталога:

Получить доступ к БД Redis можно при помощи команды:

Ваш Redis сервер готов и запущен, подтверждением тому служит строка:

Для автоматического запуска сервера при загрузке системы выполните:

Операции Redis

Простейшая команда для добавления строковых данных (основной тип данных) может выглядеть так:

В этом случае за командой SET следует ключ (users:GeorgeWashington), а за ним значение (сама строка). Двоеточие в Redis не оказывает влияния на команду. Тем не менее его использование полезно для описания ключа.

Извлечь данные можно командой GET:

Диапазоны

При выгрузке данных можно указывать диапазон при помощи двух параметров: первый и последний элементы (в качестве первого элемента принимают 0). Если последний параметр равен -1, то вы получите все элементы до конца. Например, если список содержит 6 цветов радуги (отсортированных по принципу ROYGBV), вы получите следующие результаты:

Срок действия

Redis полезен в качестве хранилища в котором можно хранить данные с определённым сроком действия. Время действия может быть указано в секундах или в формате Unix timestamp (количество секунд с 1.1.1970).

Две команды для настройки:

  • EXPIRE — задает продолжительность действия данных
  • TTL — показывает оставшееся время действия.

При попытке выборки просроченных данных, мы получим nil

Инкремент

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

Транзакции

Redis также поддерживает выполнение транзакций, которые должны следовать двум принципам:

  1. Команды должны выполняться по порядку. Они не будет прерваны другими запросами в течение всего процесса.
  2. Должна быть обеспечена целостность транзакции.

Транзакции начинаются с команды MULTI , а запускаются командой EXEC . Если по каким-либо причинам транзакция прерывается, Redis заблокирует её выполнение до тех пор, пока не будет выполнена команда redis-check-aof и отменены все изменения. После этого сервер можно будет перезапустить:

Типы данных Redis

Redis работает с пятью типами данных: Strings (строки), Sets (множества), Sorted Sets (сортированные множества), Lists (списки), Hashes (хеш)

Строки

Строки — самый распространённый тип данных в Redis. Часто встречаемые команды при работе со строками:

  • SET — установка значения ключу
  • GET — выборка значения по ключу
  • DEL — удаление ключа и значения
  • INCR — автоматический инкремент ключа
  • INCRBY — инкремент на указанную величину
  • EXPIRE — время жизни данных в секундах

Строки могут быть использованы для хранения объектов, отсортированных по ключу. Пример:

Множества

Группировать строки можно при помощи множеств — набор строк без сортировки. Часто встречающиеся команды:

  • SADD — добавление одного или нескольких значений к множеству
  • SMEMBERS — выборка всех значений множества
  • SINTER — выборка общих значений нескольких множеств
  • SISMEMBER — проверка присутствия значения во множестве
  • SRANDMEMBER — выборка случайного значения из множества

Множества довольно часто применимы в разных ситуациях. Так как каждое значение множества индивидуально, не требуется проверка перед добавлением. При выполнении команды SADD такая проверка выполняется автоматически.

Примером использования множеств может быть проверка IP адреса посетителя сайт на уникальность или извлечение случайного значения командой SRANDMEMBER .

Множества с сортировкой

Название говорит само за себя — коллекция строк ассоциированных с численным значением, отсортированных по увеличению этого значения.

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

  • ZADD — добавление значения ко множеству
  • ZRANGE — отображение значений отсортированных по индексу (от меньшего к большему)
  • ZREVRANGE — отображение значений отсортированных по индексу (от большему к меньшему)
  • ZREM — удаление значения

Мы можем создать простое множество с размерами самых маленьких стран в мире.

Списки

Списки в Redis — коллекция отсортированных значений, что их и отличает от множеств. Добавление элемента в начало или конец списка выполняется очень быстро даже если список состоит из десяти миллионов элементов. Часто встречающиеся команды:

  • LPUSH — добавление значения в начало списка
  • RPUSH — добавление значения в конец списка
  • LPOP — выборка и удаление значения первого элемента в списке
  • RPOP — выборка и удаление последнего элемента в списке
  • LREM — удаление диапазона элементов из списка
  • LRANGE — выборка диапазона элементов из списка
  • LTRIM — изменения списка с удалением всех элементов не входящих в указанный диапазон

Пример списка людей ответственных за ланч:

Добавление человека в начало очереди выглядит следующим образом:

Команда LRANGE выведет весь список:

Списка часто применяются для хранения временных событий или коллекции из ограниченного числа элементов.

Хэш

Хэш в Redis — способ хранения объектов, состоящих из множества полей. Они предназначены для хранения большого числа полей в маленьком пространстве. Хэш способны хранить больше 4 миллиардов пар поле-значение. Часто встречающиеся команды:

  • HMSET — установка нескольких значений
  • HSET — установка поля со строковым значением
  • HGET — выборка значения по полю
  • HMGET — выборка всех значений указанных полей
  • HGETALL — выборка всех значений

Пример использования типа хэш для описания примера с пользователем сайта

Для получения определенной информации используйте команду HMGET

Заключение

Redis быстро завоёвывает популярность с момента своего выпуска среди таких проектов, как github, flickr, Disqus и Craigslist. Также хранилище работает с большинством языков программирования.

Redis: установка, запуск, примеры

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

Обслуживаемые им данные хранятся в памяти (in-memory dataset), периодически синхронизируясь с данными на жестком диске, в зависимости от конфигурации Redis.

Установка Redis

Redis можно установить с помощью менеджера пакетов ОС, из исходников, либо запустить из Docker образа.

pacman

На Arch Linux с помощью pacman :

Docker

Образ доступе нв Docker Hub тут>>> .

Source code

Либо можно скачать исходники с последней версией, и собрать Redis самому.

После сборки и проверки — можно вызвать make install и начинать пользоваться Redis и утилитами:

  • redis-server : сам сервер
  • redis-sentinel : мониторинг, failover и другое, см. документацию тут>>>
  • redis-cli : CLI для работы с Redis
  • redis-benchmark : проверка производительности
  • redis-check-aof и redis-check-dump : утилиты для работы с повреждёнными файлами данных

Запуск сервера

При вызове redis-server без аргументов — он будет запущен с файлом настроек по умолчанию — /etc/redis.conf :

Можно передать свой файл настроек первым аргументом:

Проверяем с помощью ping через CLI:

Сохранение данных

При запуске с настройками по умолчанию — Redis выполняет «снимок» данных:

Тут SAVE ( BGSAVE на самом деле — SAVE будет вызван только если предыдущий BGSAVE завершился с ошибкой) выполняется каждые 900 секунд, если минимум 1 ключ был изменён, либо каждые 300 секунд при изменении 10 ключей, или раз в 60, если были изменены значения 10000 ключей.

SAVE сохраняет снимок данных из памяти на диск (механизм RDB) в файл dump.rdb :

Данные можно сдампить вручную, используя команды CLI save или bgsave .

Добавить комментарий