-
Высокая производительность — данные хранятся в оперативной памяти сервера, что значительно ускоряет работу с ними.
-
Персистентность — есть возможность сохранить снимки базы данных на диск в зависимости от количества обновлённых значений. Также есть режим AOF — сохранение на диск журнала операций с возможностью восстановить из него данные при следующем запуске.
-
Удобство — есть встроенная поддержка широко используемых структур данных (строки, списки, хеши, множества, сортированные множества).
-
Масштабируемость — поддерживается шардирование, репликация, отказоустойчивость и другие возможностт распределённых систем.
Обзор Redis — нереляционной СУБД с открытым исходным кодом
Рассказываем про особенности СУБД Redis, какие типы данных она поддерживает, где её применяют и для решения каких задач подходит.
Redis (REmote DIctionary Server) — это нереляционная резидентная СУБД с открытым исходным кодом, быстрое хранилище данных в виде пар «ключ — значение». Проект создал итальянский разработчик Сальваторе Санфилиппо, когда столкнулся с проблемами при масштабировании некоторых типов рабочих нагрузок с использованием традиционных систем баз данных. Санфилиппо создал первую концептуальную версию Redis в Tcl, позже перевёл его на язык C и реализовал первый тип данных — список. Несколько недель проект испытывали внутри компании, а 10 мая 2009 года автор выпустил его под лицензией BSD и объявил о нём в Hacker News. Redis начал набирать обороты, особенно среди сообщества Ruby, а GitHub и Instagram стали одними из первых компаний, которые взяли его на вооружение. Сейчас эту NoSQL базу данных используют как брокер сообщений, применяют для кеширования, управления сеансами, аналитики в режиме реального времени, работы с геопространственными данными, поддержки служб такси, чатов и сервисов обмена сообщениями.
Особенности Redis
Redis известен своей исключительной высокой производительностью, даже среди других key‑value хранилищ. Он лёгок в освоении и использовании, поддерживает протокол RESP
Основные особенности Redis:
Приложения, которые сохраняют в 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 также обеспечивает репликацию данных между хостами БД (как внутри, так и между зонами доступности) и автоматически переключает нагрузку на резервную реплику при аварии.