Redis
Redis | |
---|---|
лого | |
Тип | База данных «ключ-значение» |
Разработчик | Сальваторе Санфилиппо |
Написана на | Си |
Операционная система | кроссплатформенность |
Языки интерфейса | английский |
Первый выпуск | 8 мая 2009 |
Последняя версия | 7.4.0 (29.07.2024) |
Репозитарий | https://github.com/redis/redis |
Лицензия | 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].
История
Проект был разработан итальянским программистом Сальваторе Санфилиппо. Первоначально, в период с 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].
Структура
В зависимости от того, какие данные нужно хранить и как с ними работать, СУБД делятся на реляционные и нереляционные[a].
- Реляционные СУБД — 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 (25 мая 2022). Дата обращения: 5 ноября 2024.
- ↑ Sanfilippo, Salvatore. Thanks Pivotal, Hello Redis Labs (15 июля 2015). Дата обращения: 5 ноября 2024.
- ↑ Linux Foundation Launches Open Source Valkey Community . Linux Foundation (28 марта 2024). Дата обращения: 5 ноября 2024.
- ↑ G2 Crowd публикует рейтинг лучших баз данных NoSQL за осень 2015 года на основе отзывов пользователей (22 августа 2015). Дата обращения: 5 ноября 2024. Архивировано 24 августа 2015 года.
- ↑ Кузнецов С.Д. Введение в СУБД . Институт системного программирования РАН. Дата обращения: 5 ноября 2024.
- ↑ Краткое руководство по Redis . Шпаргалка для DevOps-инженера. Дата обращения: 5 ноября 2024.
- ↑ Андреев Роман. Redis: начало работы и основные команды (27 января 2023). Дата обращения: 5 ноября 2024.
- ↑ Paul Crocetti. Data replication . Techtarget. Дата обращения: 5 ноября 2024.
- ↑ Резервное копирование и репликация . Vinchin (29 января 2024). Дата обращения: 5 ноября 2024.
- ↑ Tutorial on Redis Sentinel . SQWASH (20 марта 2024). Дата обращения: 5 ноября 2024.