Redis

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Redis
Тип NoSQL-СУБД
ключ — значение»)
Разработчик Сальваторе Санфилиппо
Написана на Си[1]
Операционная система Кроссплатформенный
Языки интерфейса англ.
Первый выпуск 2009
Последняя версия
Состояние активный
Лицензия модифицированная лицензия BSD[d][2][3]
Сайт redis.io​ (англ.)
redis.io
Commons-logo.svg Redis на Викискладе

Redis (от англ. remote dictionary server) — резидентная система управления базами данных класса NoSQL с открытым исходным кодом, работающая со структурами данных типа «ключ — значение». Используется как для баз данных, так и для реализации кэшей, брокеров сообщений[en].

Ориентирована на достижение максимальной производительности на атомарных операциях (заявляется о приблизительно 100 тыс. SET- и GET-запросов на Linux-сервере начального уровня[4]). Написана на Си, интерфейсы доступа созданы для большинства основных языков программирования.

В период 2010—2013 годов разработка системы спонсировалась компанией VMware[5], с мая 2013 года, после реорганизаций в федерации EMC — VMware, проект передан в Pivotal[6]. С июня 2015 года основной спонсор проекта — компания Redis Labs[en], специально основанная для коммерциализации Redis, в неё же перешёл основной разработчик продукта — Сальваторе Санфилиппо.

Дизайн[править | править код]

Хранит базу данных в оперативной памяти, снабжена механизмами снимков и журналирования для обеспечения постоянного хранения (на дисках, твердотельных накопителях). Также предоставляет операции для реализации механизма обмена сообщениями в шаблоне «издатель-подписчик»: с его помощью приложения могут создавать каналы, подписываться на них и помещать в каналы сообщения, которые будут получены всеми подписчиками (как IRC-чат). Поддерживает репликацию данных с основных узлов на несколько подчинённых (англ. master — slave replication). Также поддерживает транзакции и пакетную обработку команд (выполнение пакета команд, получение пакета результатов).

Работает на большинстве POSIX-систем, таких как Linux, *BSD, Mac OS X без каких-либо дополнений, компания-спонсор проекта поддерживает систему на Linux и Mac OS X. Официальной поддержки для сборок Windows нет, но доступны некоторые опции, позволяющие обеспечить работу Redis на этой системе[7], сообщается о работах Microsoft по переносу Redis на Windows.

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

Среди языков программирования, имеющих библиотеки для работы с Redis — Си, C++, C#, Clojure, Лисп, Erlang, Java, JavaScript, Haskell, Lua, Perl, PHP, Python, Ruby, Scala, Go, Tcl, Rust, Swift, Nim.

Модели данных[править | править код]

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

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

Восстановление данных и репликация[править | править код]

Восстановление данных проводится двумя разными способами. Первый — это механизм снимков, в котором данные асинхронно переносятся из оперативной памяти в файл формата RDB (расширение дампов Redis). Второй способ (с версии 1.1) — журнал упреждающей записи, доступный только для дозаписи, в котором хранятся все операции, изменявшие данные в памяти.

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

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

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

Redis Sentinel[править | править код]

Redis Sentinel — специализированная система управления узлами Redis, выполняющая следующие задачи:

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

Redis Sentinel входит в состав Redis начиная с версии 2.6 (Sentinel 1 — устарел). Начиная с версии Redis 2.8 поставляется текущая версия — Sentinel 2.

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

Примечания[править | править код]

Ссылки[править | править код]