Redis Stack
Redis Stack — это расширенная версия системы управления базами данных Redis, объединяющая в одном пакете ядро Redis с набором модулей, предназначенных для реализации различных моделей данных и аналитических функций. В отличие от стандартного Redis, который является преимущественно key-value хранилищем в памяти, Redis Stack предоставляет встроенные возможности для работы с документами, графами, временными рядами, а также для полнотекстового поиска и выполнения запросов на основе JSON. Redis Stack разработан и поддерживается компанией Redis Ltd. (ранее — Redis Labs).
История
Redis был создан в 2009 году итальянским разработчиком Сальваторе Санфилиппо (Salvatore Sanfilippo, известным под псевдонимом antirez). Изначально это была простая in-memory база данных типа «ключ-значение», но со временем функциональность расширялась: появились списки, множества, хеши, а затем и более сложные структуры данных.
В 2016 году компания Redis Labs (ныне Redis Ltd.) начала выпускать модули для Redis, которые добавляли новые возможности без изменения ядра. Ключевыми модулями стали:
- RediSearch — полнотекстовый поиск и вторичные индексы.
- RedisJSON — работа с данными в формате JSON.
- RedisGraph — графовая база данных (на основе алгоритмов графов).
- RedisTimeSeries — работа с временными рядами.
В 2020 году Redis Labs объединила эти модули в единый дистрибутив под названием Redis Stack, чтобы упростить развёртывание и использование Redis для задач, выходящих за рамки простого кэширования. Redis Stack доступен как для локальной установки, так и в виде облачных сервисов (Redis Enterprise, Redis Cloud).
Архитектура и компоненты
Redis Stack состоит из двух основных частей:
- Ядро Redis — стандартный in-memory сервер баз данных, поддерживающий все классические структуры данных (строки, списки, множества, хеши, битовые карты, гиперлоги и т.д.).
- Набор модулей — расширения, которые загружаются в ядро и добавляют новые типы данных и команды.
Модуль RediSearch
RediSearch предоставляет возможности полнотекстового поиска, вторичных индексов и агрегации данных. Он поддерживает:
- Индексацию полей различных типов (текстовые, числовые, геопространственные).
- Поиск по фразам, с учётом стемминга (для русского языка — через Snowball), нечёткий поиск.
- Сортировку, фильтрацию, группировку и агрегацию результатов.
- Поддержку синонимов и стоп-слов.
RediSearch использует собственную структуру данных — инвертированный индекс, хранящийся в памяти. Это обеспечивает высокую скорость поиска, но требует значительного объёма оперативной памяти.
Модуль RedisJSON
RedisJSON позволяет хранить, извлекать и обновлять документы в формате JSON непосредственно в Redis. Он поддерживает:
- Полную спецификацию JSON (объекты, массивы, строки, числа, булевы значения, null).
- Операции на уровне отдельных путей (например,
JSON.SET,JSON.GET,JSON.ARRAPPEND). - Индексацию и поиск по JSON-полям через RediSearch (при совместном использовании).
RedisJSON использует собственный двоичный формат хранения, который позволяет эффективно обновлять части документа без перезаписи всего объекта.
Модуль RedisGraph
RedisGraph реализует графовую базу данных, основанную на модели свойств (property graph). Он поддерживает:
- Язык запросов Cypher (адаптированная версия, используемая также в Neo4j).
- Создание узлов, рёбер и свойств.
- Поиск по графу с использованием алгоритмов кратчайшего пути, обхода в глубину/ширину, PageRank и других.
- Индексацию свойств узлов и рёбер.
RedisGraph хранит граф в памяти в виде разреженных матриц, что позволяет выполнять запросы с высокой производительностью.
Модуль RedisTimeSeries
RedisTimeSeries предназначен для работы с временными рядами — последовательностями данных, упорядоченными по времени. Он поддерживает:
- Создание временных рядов с заданным интервалом (например, 1 секунда, 1 минута).
- Добавление точек данных с меткой времени.
- Агрегацию данных (среднее, сумма, минимум, максимум, количество) за заданные интервалы.
- Сжатие данных (downsampling) для экономии памяти.
- Индексацию по меткам (labels) для фильтрации рядов.
RedisTimeSeries использует структуру данных на основе сжатых массивов, что позволяет хранить большие объёмы временных данных в оперативной памяти.
Применение
Redis Stack применяется в различных сценариях, где требуется высокая производительность и низкая задержка:
- Кэширование — классическое использование Redis для ускорения доступа к данным (например, кэширование сессий, страниц, результатов запросов).
- Полнотекстовый поиск — RediSearch используется для поиска по каталогам товаров, документам, сообщениям в чатах.
- Управление сессиями — хранение сессий пользователей в памяти с быстрым доступом.
- Обработка очередей — Redis поддерживает очереди (списки, потоки) для асинхронной обработки задач.
- Аналитика в реальном времени — RedisTimeSeries позволяет собирать и агрегировать метрики (например, количество запросов в секунду, температура датчиков).
- Графовые базы данных — RedisGraph используется для анализа социальных сетей, рекомендательных систем, маршрутизации.
- Работа с JSON — RedisJSON применяется для хранения конфигураций, профилей пользователей, данных из REST API.
Преимущества и недостатки
Преимущества
- Высокая производительность — все операции выполняются в оперативной памяти, что обеспечивает субмиллисекундные задержки.
- Простота развёртывания — Redis Stack поставляется как единый пакет (Docker-образ, deb/rpm-пакет), не требующий настройки отдельных модулей.
- Гибкость — поддержка нескольких моделей данных (ключ-значение, документы, графы, временные ряды) в одной системе.
- Экосистема — Redis имеет большое количество клиентских библиотек для различных языков программирования (Python, Java, Node.js, Go, C# и др.).
Недостатки
- Ограничения по объёму данных — Redis хранит данные в оперативной памяти, что делает его дорогим для хранения больших объёмов (десятки гигабайт и более). Для экономии можно использовать сжатие или выгрузку на диск, но это снижает производительность.
- Отсутствие полной ACID-транзакционности — Redis не поддерживает сложные транзакции с откатом (rollback) в классическом понимании реляционных баз данных.
- Сложность администрирования — для крупных кластеров требуется настройка репликации, шардирования и мониторинга.
- Зависимость от модулей — некоторые модули (например, RedisGraph) могут иметь ограниченную поддержку или быть менее стабильными, чем ядро Redis.
Лицензия и сообщество
Redis Stack распространяется под лицензией Redis Source Available License (RSALv2) и Server Side Public License (SSPL). Это означает, что исходный код доступен, но его использование в коммерческих облачных сервисах (например, предоставление Redis как услуги) требует приобретения коммерческой лицензии у Redis Ltd. Для локального использования и разработки лицензия бесплатна.
Сообщество Redis активно развивается: на GitHub ведутся обсуждения, выпускаются обновления и исправления. Redis Ltd. также предоставляет платные версии с расширенной поддержкой (Redis Enterprise).
Примеры использования
- E-commerce — каталог товаров с полнотекстовым поиском и фильтрацией (RediSearch).
- IoT — сбор и агрегация данных с датчиков в реальном времени (RedisTimeSeries).
- Социальные сети — построение графа друзей и рекомендаций (RedisGraph).
- Веб-приложения — кэширование сессий и данных (стандартный Redis).
Источники
- Официальная документация Redis Stack: redis.io/docs/stack/
- Redis Ltd. — официальный сайт: redis.com
- Статья «Redis Stack: The Modern Data Stack for Real-Time Applications» — Redis Blog, 2021.
- Документация модулей: RediSearch, RedisJSON, RedisGraph, RedisTimeSeries — на GitHub-репозиториях Redis.
- Книга «Redis in Action» by Josiah L. Carlson, 2013.
- Статья «Redis: A Brief History» — antirez.com, 2020.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →