Собрали варианты использования базы данных Redis по различным типам основных структур данных. В каких реальных системах применяют строки, списки, множества, упорядоченные множества и хэш-таблицы Redis?

Статья написана на основе перевода Top Redis Use Cases by Core Data Structure Types с дополнениями.

Что такое база данных Redis

Redis, сокращенно от Remote Dictionary Server, представляет собой резидентное хранилище структур данных типа «ключ — значение». Программу с открытым исходным кодом на языке C написал Сальваторе Санфилиппо, она вышла 10 мая 2009 года под лицензией BSD.

В зависимости от настроек Redis может действовать как база данных, кэш или брокер сообщений. Важно отметить, что Redis — это СУБД типа NoSQL. В отличие от СУБД типа SQL (Structured Query Language), таких как MySQL и PostgreSQL, сервер Redis не хранит данные в строго определенных схемах, то есть в таблицах, строках и столбцах. Вместо этого, он хранит данные в структурах данных, что повышает гибкость системы.

СУБД Redis можно развернуть в облаке. Вы получаете готовую к работе, оптимально сконфигурированную, масштабируемую и управляемую базу данных по запросу за две минуты. Перенести данные в облачную СУБД Redis Mail.ru Cloud Solutions можно с помощью автоматизированного сервиса, наши эксперты помогут в миграции данных и настройке базы данных.

Структуры данных в Redis

Какие типы данных поддерживает Redis? В этой статье мы рассмотрим строки, списки, множества, упорядоченные множества и хэши. Кроме них, поддерживаются и другие типы данных, такие как битовые карты, гиперлоги и геопространственные индексы с радиус-запросами и потоками.

Сообщество написало для базы Redis некоторые графические интерфейсы, но сегодня основным инструментом для пользователей является командная строка. А вот в популярных базах данных SQL пользователи часто предпочитают системы управления с графическим интерфейсом, например: phpMyAdmin для MySQL и PgAdmin для PostgreSQL.

Давайте подробнее рассмотрим типы данных в Redis, примеры их использования и особенности.

Строки Redis

Строки Redis — базовый тип данных, используемый всеми другими структурами данных. Он очень похож на строки в языках программирования, таких как Java или Python. Строки с произвольным типом данных считаются бинарно-безопасными и имеют максимальную длину 512 МБ.

Вот несколько полезных команд для строк Redis:

Сохранить строку ‘john’ в ключе ‘student’:

SET “student” “john”

Запросить строку:

GET “student”

Удалить строку в конкретном ключе:

DEL “student”

Примеры использования строк Redis

  1. Кэш сессии: многие веб-сайты используют строки Redis для создания кэша сессии, чтобы ускорить работу веб-сайта путем кэширования HTML-фрагментов или страниц. Redis идеально подходит для этого, так как данные временно хранятся в оперативной памяти. Например, он способен временно хранить пользовательские данные, такие как товары в корзине покупок интернет-магазина, чтобы они не потерялись в случае выхода из системы или потери соединения.
  2. Очереди: этот вариант использования Redis стоит рассмотреть для любого приложения, которое занимается обменом сообщениями, сбором данных, управлением заданиями, маршрутизацией пакетов данных или сталкивается с перегрузкой данными. Redis поможет управлять размером очереди в зависимости от скорости поступления и отправки пакетов — для эффективного распределения ресурсов.
  3. Биллинг по объему оказанных услуг (usage-или metered billing): менее известный пример использования строк Redis — подсчет биллинга в реальном времени в моделях с тарифами на конкретные услуги. Это позволяет SaaS-платформам, которые выставляют счета на основе фактического использования, измерять активность своих клиентов. Например, операторы сотовой связи могут взимать плату за отдельные текстовые сообщения или минуты разговора.

Списки Redis

Списки содержат строки, отсортированные по порядку их вставки. Вы можете добавлять элементы в начало или конец списка, что полезно для заданий очереди. Более срочные задания можно поставить перед менее приоритетными. Для вставки элемента в начале строки (слева) мы используем команду LPUSH, а для вставки в конце строки (справа) — команду RPUSH.

Рассмотрим один пример:

LPUSH list x # now the list is "x"

LPUSH list y # now the list is "y","x"

RPUSH list z # now the list is "y","x","z" 

Обратите внимание, как команда RPUSH добавляет элемент ‘z’ в конец списка.

Примеры использования списков Redis

  1. Сайты социальных сетей: социальные платформы, такие как Twitter, используют списки Redis для заполнения потоков сообщений на стене или главной странице — и могут добавлять в верхнюю часть потока трендовые твиты или истории.
  2. RSS-каналы: создание собственной новостной ленты из произвольных источников, где вы получаете последние обновления, а подписчики могут подписываться на вашу подборку каналов как на отдельный RSS-канал.
  3. Таблицы лидеров: на платформах и форумах с голосованиями, таких как Reddit, система Redis помогает добавлять топики в таблицу лидеров и сортировать их по количеству голосов.

Множества Redis

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

Операции с множествами выполняются достаточно быстро. Независимо от количества сохраненных элементов, добавление или удаление элементов в множество занимает одно и то же время.

Кроме того, множества не допускают повторения ключей или объектов, поэтому многократное добавление ключа в множество просто проигнорируется. Это определяется функцией SADD, которая позволяет избежать дублирования нескольких похожих записей. Атрибут SADD можно использовать для проверки уникальных значений, а также планирования заданий в фоновом режиме, включая задания cron, которые представляют собой автоматизированные скрипты.

Множества особенно полезны для анализа поведения клиентов в режиме реального времени. Представим магазин одежды. Здесь упорядоченные множества Redis с помощью различных сопоставлений дадут точную картину поведения клиентов. Вы можете определить паттерны покупок в зависимости от пола и других характеристик покупателя, узнать, какие модели одежды продаются лучше, в какие часы зафиксированы максимальные продажи каждого товара.

Примеры использования множеств Redis

  1. Анализ продаж в электронной коммерции: многие интернет-магазины используют множества Redis для анализа поведения клиентов, например, анализа поисковых запросов или покупок в определенной категории или подкатегории товаров. Так, владелец книжного интернет-магазина может узнать, сколько покупателей приобрели медицинские книги по психологии.
  2. Отслеживание IP-адресов: множества Redis — отличный инструмент для разработчиков, которые хотят проанализировать IP-адреса, с которых пришли посетители на определенную страницу сайта или пост в блоге. Функция SADD позволяет игнорировать дубликаты для получения числа уникальных посетителей.
  3. Фильтрация непристойного контента: в любом приложении, где пользователи вводят данные, рекомендуется реализовать контент-фильтрацию непристойных слов. Это можно сделать с помощью множеств Redis, добавив слова, которые вы хотите отфильтровать, к соответствующему ключу командой SET с атрибутом SADD.

Упорядоченные множества

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

Такие множества Redis похожи на обычные, только здесь каждому члену множества присваивается особое поле с номером (score). Упорядоченные множества известны высокой скоростью, поскольку вы можете быстро вернуть упорядоченные списки и получить доступ к элементам.

Примеры использования упорядоченных множеств Redis

  1. Платформы с вопросами и ответами: многие платформы с вопросами и ответами, такие как StackOverflow и Quora, используют упорядоченные множества Redis для ранжирования самых заплюсованных ответов на каждый вопрос, чтобы вывести лучший контент в верхнюю часть страницы.
  2. Таблицы результатов в игровых приложениях: онлайн-игры используют упорядоченные множества для ведения таблиц с результатами. В таких таблицах строки с баллами могут повторяться, а строки с уникальным идентификатором пользователя — нет.
  3. Планировщики задач: упорядоченные множества Redis являются отличным инструментом для планировщиков задач, поскольку поле «score» позволяет ранжировать задачи в очереди по приоритету. Для любых задач без номера можно принять параметр WEIGHTS по умолчанию равным единице.
  4. Геокодирование: Redis API применяет упорядоченные множества для геокодирования — назначения географических идентификаторов (например, широты и долготы) объектам карты и записям данных, так что многомерные данные превращаются в линейные.
Управляемая и масштабируемая СУБД Redis в облаке
Попробуйте бесплатно

Хэши Redis

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

Хэши позволяют хранить приличное количество полей — до 2³²-1 пар полей-значений (более 4,29 миллиарда), при этом занимают очень мало места. Следует использовать хэши Redis всегда, когда возможно, так как с их помощью можно хранить миллионы объектов в небольшом инстансе Redis.

Команды для базовых хэш-операций — get, set, exists. Есть также команды и для многих продвинутых операций.

Примеры использования хэшей Redis

  1. Профили пользователей: многие веб-приложения вычисляют хэши для профилей пользователей, чтобы использовать один хэш для всех полей из профиля, таких как имя, фамилия, адрес электронной почты, пароль и так далее.
  2. Сообщения пользователей: социальные платформы, такие как Instagram, используют хэши Redis, чтобы связать все фотографии или сообщения одного пользователя с его профилем. Механизм хэширования позволяет быстро искать и возвращать значения, помещать данные в память и использовать сохраняемость данных в случае падения одного из серверов.
  3. Хранение мультитенантных метрик: мультитенантные приложения могут использовать хэши Redis для записи и хранения метрик продуктов и продаж, чтобы надежно разделить данные между всеми клиентами. Хэши можно эффективно закодировать в небольшом пространстве памяти.

Кто использует Redis

DB Redis используют на большинстве сайтов для путешествий и гостиниц, публичных форумах, а также в социальных сетях, SaaS и электронной коммерции. И это лишь некоторые отрасли.

Можно назвать несколько ведущих компаний, которые используют Redis: Pinterest, Uber, Slack, Airbnb, Twitter, StackOverflow. Статистические данные по популярности Redis на март 2020 года:

  1. 4556 компаний сообщили об использовании Redis на StackShare;
  2. 13 846 разработчиков на StackShare отметили Redis в своих профилях;
  3. 41 615 разработчиков на GitHub поставили звезду проекту Redis;
  4. Redis занимает 8-е место в рейтинге баз данных DB-Engines с оценкой 147,58.