Redis

Материал из Циклопедии
Перейти к навигации Перейти к поиску
программное обеспечение
Redis
Файл:Redis logo.svg
лого
Тип

База данных «ключ-значение»

Разработчик

Сальваторе Санфилиппо

Написана на

Си

Операционная система

кроссплатформенность

Языки интерфейса

английский

Первый выпуск

8 мая 2009

Последняя версия

7.4.0 (29.07.2024)

Лицензия

RSAL v2 или SSPL v1

Сайт

Redis Community Edition & Stack

Redis (от англ. Remote Dictionary Server — удалённый серверный словарь) — нереляционная система управления базами данных (СУБД), созданная на языке Си и относящаяся к классу NoSQL. В отличие от других баз данных, Redis хранит данные в оперативной памяти, а не на диске, что позволяет значительно увеличить скорость обращения к данным, например, на стандартном Linux-сервере — до 100 000 операций чтения и записи в секунду. Ещё одна особенность Redis — это модель, по которой система хранит данные, — «ключ-значение». Ключ — это название какого-то поля, а значение — его содержание.

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

Одним из практических вариантов использования Redis является промежуточный уровень между реляционными СУБД — Oracle, PostgreSQL или MySQL — и конечными потребителями. Реляционные СУБД не такие быстрые, но зато обеспечивают высокий уровень надежности, а для повышения производительности к ним обычно подключают Memcached или Redis[1].

История[править]

Файл:Salvatore Sanfilippo.png
Сальваторе Санфилиппо

Проект был разработан итальянским программистом Сальваторе Санфилиппо. Первоначально, в период с 2010 года по 2013 год, разработка системы спонсировалась компанией VMware, затем для коммерциализации проекта была создана компания Redis Labs, спонсировавшая проект с 2015 года по 2020 год. После того, как Санфилиппо в 2020 году ушёл из компании, Redis Labs убрала слово «Labs» из своего названия и теперь известна просто как «Redis»[2].

Изначально СУБД выпускалась под свободной лицензией, в 2024 году компания Redis перевела систему под лицензию SSPL (от англ. Server Side Public License), однако организаторы фонда Linux Foundation создали версию СУБД Redis с открытым исходным кодом под названием Valkey, позволяющую разработчикам, участникам сообщества и пользователям продолжать работу на прежних условиях свободной лицензии[3]. По состоянию на 2015 год СУБД Redis входила в пятёрку лидеров среди платформ NoSQL[4].

Структура[править]

В зависимости от того, какие данные нужно хранить и как с ними работать, СУБД делятся на реляционные и нереляционные[Прим. 1].

  • Реляционные СУБД — SQL (от англ. Structured Query Language — язык структурированных запросов) — организуют информацию в виде таблиц, где данные связываются друг с другом с помощью специальных ключей. Такой подход удобен для сложных запросов и анализа данных, поскольку можно легко комбинировать информацию из разных таблиц. Такие базы часто используются в банковских системах или для учёта товаров на складах.
  • Нереляционные СУБД — NoSQL (от англ. not only SQL — не только SQL) — нужны для хранения данных в более гибком формате, например в виде документов, графов или пар «ключ-значение». Вместо таблиц и жёстких связей такие базы работают с более динамичными структурами данных, что позволяет быстрее обрабатывать информацию в реальном времени.

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

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

Основные функции, которые обеспечивает СУБД Redis[6]:

  • Архитектура Redis поддерживает репликацию данных, где информация каскадно передаётся с основных узлов на подчинённые, обеспечивая надёжность и распределение нагрузки. Система также обладает возможностью выполнения транзакций и пакетной обработки команд, что позволяет оптимизировать рабочие процессы.
  • Redis обладает функцией кроссплатформенности, работая на большинстве POSIX-совместимых систем, включая Linux, BSD и Mac OS X, без необходимости дополнительных настроек. Хотя официальной поддержки Windows нет, существуют альтернативные решения для работы Redis в этой среде. Более того, Microsoft проявляет интерес к адаптации Redis для Windows.
  • Версия 2.6.0 Redis может работать совместно с языком Lua, что позволяет выполнять сложные запросы непосредственно на сервере. Эта функция позволяет осуществлять атомарную обработку данных в ситуациях, выходящих за рамки стандартного функционала Redis.
  • Универсальность Redis подтверждается широким спектром языков программирования, для которых разработаны библиотеки взаимодействия с системой. Этот список охватывает как классические языки (Си, C++, Java), так и современные решения (Go, Rust, Swift), а также специализированные языки (Haskell, Erlang, Clojure), обеспечивая Redis место в арсенале разработчиков различных направлений.

Комментарии[править]

  1. ↑ Касательно терминологии. В учебниках по базам данных обычно используется термин «реляционная база данных» (БД), управление которой осуществляется одной из СУБД в зависимости от поставленной задачи. Таким образом, реляционная БД — это сама база данных, а реляционная СУБД — это система управления этой базой данных.[5]

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

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

Типы данных[править]

Redis поддерживает различные типы данных, которые позволяют решать широкий спектр задач[7].

  • Строки — базовый тип данных в Redis, который может содержать любые данные, включая текст, числа или двоичные данные.
  • Множества — наборы строк, где каждый элемент уникален. Redis поддерживает операции, такие как добавление, удаление и проверка наличия элемента, а также операции над множествами.
  • Сортированные множества (совокупности неповторяющихся элементов, связанных с числовым идентификатором, который используется для упорядочивания элементов от наименьшего к наибольшему.)
  • Хэш-таблицы, где ключи и значения являются строками.
  • HyperLogLogs — вероятностные структуры данных, используется для приблизительной оценки размера множества. Доступно с версии Redis 2.8.9.
  • Поток записей с группами потребителей позволяет отправлять различное подмножество сообщений разным потребителям. Доступно с версии Redis 5.0.
  • Геопространственные данные, получаемые с помощью метода geohash, доступного начиная с версии Redis 3.2. Позволяют хранить и запрашивать данные на основе их географического положения.

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

Сохранение данных[править]

Redis предлагает два метода сохранения и восстановления данных.

  • Первый метод — механизм снимков, действующий как моментальная фотография данных, асинхронно перенося их из оперативной памяти в файл формата Rdb с возможностью использования в реляционной СУБД.
  • Второй метод, введённый с версии 1.1, представляет собой журнал упреждающей записи — своеобразный «чёрный ящик» системы, фиксирующий все операции, модифицирующие данные в памяти.

Репликация[править]

Архитектура Redis поддерживает систему репликации при передаче информации[8]. Синхронная репликация означает репликацию в реальном времени. Всякий раз, когда текущие данные изменяются, реплики данных также немедленно обновляются[9]. При этом все изменения, происходящие на ведущем узле (master), автоматически распространяются на подчинённые узлы (slave). Конфигурация ведомых узлов осуществляется путём модификации параметра slaveof или аналогичной команды, в то время как узлы без такой конфигурации по умолчанию считаются ведущими.

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

Redis Sentinel[править]

Система репликации Redis не обладает встроенным механизмом автоматической отказоустойчивости. Для решения этой проблемы была разработана система Redis Sentinel, осуществляющая мониторинг и автоматическое переключение узлов при сбоях[10].

Система выполняет следующие функции:

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

Первоначально появилась возможность интегрировать версию Sentinel 1 в основной дистрибутив Redis 2.6. Начиная с версии Redis 2.8, в обращение вошла усовершенствованная версия — Sentinel 2, ставшая стандартной опцией.

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

Примечания[править]

  1. ↑ Обзор системы управления базами данных Redis. CNewsMarket (2022-05-25). Проверено 5 ноября 2024.
  2. ↑ Sanfilippo S. Thanks Pivotal, Hello Redis Labs. Antirez (2015-07-15). Проверено 5 ноября 2024.
  3. ↑ Linux Foundation Launches Open Source Valkey Community. Linux Foundation (2024-03-28). Проверено 5 ноября 2024.
  4. ↑ G2 Crowd публикует рейтинг лучших баз данных NoSQL за осень 2015 года на основе отзывов пользователей (2015-08-22). Проверено 5 ноября 2024.
  5. ↑ Кузнецов С.Д. Введение в СУБД. Институт системного программирования РАН. Проверено 5 ноября 2024.
  6. ↑ Краткое руководство по Redis. Шпаргалка для DevOps-инженера. Проверено 5 ноября 2024.
  7. ↑ Андреев Р. Redis: начало работы и основные команды (2023-01-27). Проверено 5 ноября 2024.
  8. ↑ Crocetti P. Data replication. Techtarget. Проверено 5 ноября 2024.
  9. ↑ Резервное копирование и репликация. Vinchin (2024-01-29). Проверено 5 ноября 2024.
  10. ↑ Tutorial on Redis Sentinel. SQWASH (2024-03-20). Проверено 5 ноября 2024.
Знание.Вики

Одним из источников, использованных при создании данной статьи, является статья из википроекта «Знание.Вики» («znanierussia.ru») под названием «Redis», расположенная по следующим адресам:

Материал указанной статьи полностью или частично использован в Циклопедии по лицензии CC-BY-SA 4.0 и более поздних версий.

Всем участникам Знание.Вики предлагается прочитать материал «Почему Циклопедия?».