Обзор Redis — нереляционной СУБД с открытым исходным кодом

Рассказываем про особенности СУБД Redis, какие типы данных она поддерживает, где её применяют и для решения каких задач подходит.

Redis (REmote DIctionary Server) — это нереляционная резидентная СУБД с открытым исходным кодом, быстрое хранилище данных в виде пар «ключ — значение». Проект создал итальянский разработчик Сальваторе Санфилиппо, когда столкнулся с проблемами при масштабировании некоторых типов рабочих нагрузок с использованием традиционных систем баз данных. Санфилиппо создал первую концептуальную версию Redis в Tcl, позже перевёл его на язык C и реализовал первый тип данных — список. Несколько недель проект испытывали внутри компании, а 10 мая 2009 года автор выпустил его под лицензией BSD и объявил о нём в Hacker News. Redis начал набирать обороты, особенно среди сообщества Ruby, а GitHub и Instagram стали одними из первых компаний, которые взяли его на вооружение. Сейчас эту NoSQL базу данных используют как брокер сообщений, применяют для кеширования, управления сеансами, аналитики в режиме реального времени, работы с геопространственными данными, поддержки служб такси, чатов и сервисов обмена сообщениями.

Особенности Redis

Redis известен своей исключительной высокой производительностью, даже среди других key‑value хранилищ. Он лёгок в освоении и использовании, поддерживает протокол RESP, реализация которого есть в виде библиотек на большинстве языков высокого уровня, таких как Golang, Ruby, Python, JavaScript, Java, C, C++ и PHP.

Основные особенности Redis:

  • Высокая производительность — данные хранятся в оперативной памяти сервера, что значительно ускоряет работу с ними.

  • Персистентность — есть возможность сохранить снимки базы данных на диск в зависимости от количества обновлённых значений. Также есть режим AOF — сохранение на диск журнала операций с возможностью восстановить из него данные при следующем запуске.

  • Удобство — есть встроенная поддержка широко используемых структур данных (строки, списки, хеши, множества, сортированные множества).

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

Приложения, которые сохраняют в Redis данные в режиме реального времени, могут выполнять до миллионов запросов в секунду.

Какие типы данных поддерживает Redis

Redis хранит пары «ключ и значение». Ключ — строковый литерал, а в качестве значения могут выступать строки, списки, множества, упорядоченные множества, хеши и другие типы данных (битовые карты, гиперлоги и геопространственные индексы с радиус‑запросами и потоками). Чтобы разобраться, для каких сценариев подходит Redis, нужно понимать, для чего используются типы.

  • Строки — базовый тип данных, его используют все другие структуры данных. Сохраняйте числа, JSON, байты изображения или что‑нибудь ещё. Тем не менее набор операций для работы с этим типом данных ограничен, поэтому, например, извлечь нужное значение из JSON вам не удастся.

  • Списки — строки, отсортированные по порядку их вставки.

  • Множества — тип данных, который поддерживает операции пересечения, объединения и подобные. Множества никак не упорядочены и обычно используются, когда вы хотите выполнить аудит и увидеть взаимосвязи между переменными.

  • Упорядоченные множества — набор строк, в котором элементы упорядочены по номерам. это одна из самых продвинутых структур данных.

  • Хеши — это карты между строковыми полями и строковыми значениями, коллекция пар «ключ — значение». Они используются, когда нужно создать контейнер уникальных значений для представления объектов.

Где применяют Redis

Базу данных Redis используют сервисы для путешественников, форумы, социальные сети и электронная коммерция. Например, это компании Pinterest, Uber, Slack, Airbnb, Twitter, Stack Overflow. Рассмотрим основные сценарии использования Redis.

  • Кеш сессии — сайты с помощью Redis повышают скорость: кешируют HTML‑фрагменты или страницы. Например, можно временно хранить такие пользовательские данные, как товары в корзине покупок интернет‑магазина.

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

  • Биллинг по объёму оказанных услуг — позволяет SaaS‑платформам, которые выставляют счета на основе фактического использования, измерять активность своих клиентов.

  • Социальные сети — используют для заполнения потоков сообщений на стене или главной странице.

  • Профили и сообщения пользователей. Например, чтобы связать все фотографии или сообщения одного пользователя с его профилем.

  • Лидерборды — на платформах и форумах с голосованиями, таких как Reddit, Redis помогает добавлять топики в таблицу лидеров и сортировать их по количеству голосов.

  • Таблицы результатов в игровых приложениях.

  • Анализ продаж в электронной коммерции и анализ поведения клиентов.

  • Хранение мультитенантных метрик — для записи и хранения метрик продуктов и продаж, чтобы надёжно разделить данные между всеми клиентами.

  • Фильтрация запрещённого контента.

  • Планировщики задач.

  • Геокодирование — назначение географических идентификаторов (например, широты и долготы) объектам карты и записям данных.

Однако Redis редко используется как основное хранилище в крупных системах: оптимальной производительности можно добиться при хранении всего объёма данных в оперативной памяти, а для значительного числа хранилищ это невозможно из‑за технических ограничений на её размер. Кроме того, стоимость хранения в оперативной памяти всё ещё не может сравниться со стоимостью хранения на диске. Наибольшая производительность — а это главное преимущество Redis — достигается при выключенной персистентности, что создаёт риск потерять данные. Асинхронная репликация же, которая применяется в Redis и позволяет быстрее записывать данные, даёт некоторую постоянную задержку достижения консистентности данных между мастером и репликой, что допустимо не во всех сценариях использования.

Redis в Yandex Cloud

Хранилища данных на базе Redis отлично подходят для решения задач, в которых нужно быстро обрабатывать запросы, а объёмы данных небольшие. В инфраструктуре Yandex Cloud кластер СУБД Redis можно развернуть с помощью управляемого сервиса Yandex Managed Service for Redis. Например, для бэкенда приложений чаще используют базы данных OLTP, например Yandex Managed Service for MySQL или Yandex Managed Service for PostgreSQL. Но в задачах, где время отклика СУБД особенно критично (например, интернет‑магазины), можно использовать кеш (для корзины магазина) — с помощью Yandex Managed Service for Redis.

При создании кластеров Managed Service for Redis выделяет ресурсы и устанавливает СУБД, автоматически создаёт для них резервные копии, устанавливает исправления и обновления СУБД. Managed Service for Redis также обеспечивает репликацию данных между хостами БД (как внутри, так и между зонами доступности) и автоматически переключает нагрузку на резервную реплику при аварии.

author
Евгений Левашов
Главный редактор Yandex Cloud. Пишет для IT-компаний с 2015 года, ведёт собственный блог и канал про технологии.

Напишите нам

Начать пользоваться Yandex Cloud

Тарифы

Узнать цены и рассчитать стоимость

Документация

Подробные руководства
Обзор Redis — нереляционной СУБД с открытым исходным кодом
Войдите, чтобы сохранить пост