Redis
программное обеспечение | |
Redis | |
---|---|
![]() лого | |
Тип |
База данных «ключ-значение» |
Разработчик | |
Написана на | |
Операционная система | |
Языки интерфейса | |
Первый выпуск |
8 мая 2009 |
Последняя версия |
7.4.0 (29.07.2024) |
Лицензия |
RSAL v2 или SSPL v1 |
Сайт |
Redis (от англ. Remote Dictionary Server — удалённый серверный словарь) — нереляционная система управления базами данных (СУБД), созданная на языке Си и относящаяся к классу NoSQL. В отличие от других баз данных, Redis хранит данные в оперативной памяти, а не на диске, что позволяет значительно увеличить скорость обращения к данным, например, на стандартном Linux-сервере — до 100 000 операций чтения и записи в секунду. Ещё одна особенность Redis — это модель, по которой система хранит данные, — «ключ-значение». Ключ — это название какого-то поля, а значение — его содержание.
Используется в основном для хранения временных данных, которые нужно быстро получать, например кэшированные страницы сайта, результаты поиска или сессии пользователей.
Одним из практических вариантов использования Redis является промежуточный уровень между реляционными СУБД — Oracle, PostgreSQL или MySQL — и конечными потребителями. Реляционные СУБД не такие быстрые, но зато обеспечивают высокий уровень надежности, а для повышения производительности к ним обычно подключают Memcached или Redis[1].
История[править]
Проект был разработан итальянским программистом Сальваторе Санфилиппо. Первоначально, в период с 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 место в арсенале разработчиков различных направлений.
Комментарии[править]
- ↑ Касательно терминологии. В учебниках по базам данных обычно используется термин «реляционная база данных» (БД), управление которой осуществляется одной из СУБД в зависимости от поставленной задачи. Таким образом, реляционная БД — это сама база данных, а реляционная СУБД — это система управления этой базой данных.[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-узлов функционирует на принципе кворума, обеспечивая надёжность системы даже при временном отказе отдельных элементов.
Примечания[править]
- ↑ Обзор системы управления базами данных Redis. CNewsMarket (2022-05-25). Проверено 5 ноября 2024.
- ↑ Sanfilippo S. Thanks Pivotal, Hello Redis Labs. Antirez (2015-07-15). Проверено 5 ноября 2024.
- ↑ Linux Foundation Launches Open Source Valkey Community. Linux Foundation (2024-03-28). Проверено 5 ноября 2024.
- ↑ G2 Crowd публикует рейтинг лучших баз данных NoSQL за осень 2015 года на основе отзывов пользователей (2015-08-22). Проверено 5 ноября 2024.
- ↑ Кузнецов С.Д. Введение в СУБД. Институт системного программирования РАН. Проверено 5 ноября 2024.
- ↑ Краткое руководство по Redis. Шпаргалка для DevOps-инженера. Проверено 5 ноября 2024.
- ↑ Андреев Р. Redis: начало работы и основные команды (2023-01-27). Проверено 5 ноября 2024.
- ↑ Crocetti P. Data replication. Techtarget. Проверено 5 ноября 2024.
- ↑ Резервное копирование и репликация. Vinchin (2024-01-29). Проверено 5 ноября 2024.
- ↑ Tutorial on Redis Sentinel. SQWASH (2024-03-20). Проверено 5 ноября 2024.
![]() | Одним из источников, использованных при создании данной статьи, является статья из википроекта «Знание.Вики» («znanierussia.ru») под названием «Redis», расположенная по следующим адресам:
Материал указанной статьи полностью или частично использован в Циклопедии по лицензии CC-BY-SA 4.0 и более поздних версий. Всем участникам Знание.Вики предлагается прочитать материал «Почему Циклопедия?». |
---|