Анализ данных • 21 июня 2024 • 5 мин чтения

Redis: что это и как использовать

Redis — одна из популярных систем управления базами данных, СУБД. Рассказываем, как с ней работать, где применять, какие у неё преимущества и недостатки.

Для чего нужен Redis

СУБД помогают работать с базами: обращаться к ним, получать, создавать или менять данные. Redis (REmote DIctionary Service — удалённый сервер словарей) — это одна из таких СУБД.

Информация Redis хранится в оперативной памяти. Такая память работает быстрее, чем системы, которые используют жёсткий диск. Ещё одна особенность Redis — это модель, по которой она хранит данные, — «ключ-значение». Другие СУБД, в отличие от неё, используют для этого двумерные таблицы.

В модели «ключ-значение» ключ — это уникальный идентификатор, а значение — информация, которая с ним связана. Проще говоря, это наименование поля и его содержание. Вот как может выглядеть такая пара:


Ключ


Значение

user:888
{name: "Ivan Ivanov", age: 31}
last_seen:888
{time: "2024-06-09T13:40:00Z"}

С помощью модели «ключ-значение» можно быстро искать информацию в базе. Поэтому Redis часто используют для задач, где важна высокая скорость: например, при публикации сообщений или кэшировании. СУБД Redis увеличивает производительность веб-приложений. Она помогает сократить время отклика и снизить нагрузку на серверы.

Изучить Redis и другие способы управления данными можно на курсе «Инженер данных». Там также учат проектировать пайплайны и создавать витрины и хранилища. В конце студенты делают пет-проект, который можно добавить в портфолио и показать будущему работодателю.

Преимущества и недостатки СУБД

Один из плюсов, из-за которых используют Redis, — высокая скорость работы. Рассмотрим другие плюсы и некоторые недостатки.


Плюсы


Минусы

Высокая производительность. С помощью Redis можно быстро читать и записывать данные.

Простота использования. У Redis интуитивно понятный интерфейс.

Масштабируемость. С помощью Redis можно добавлять дополнительные узлы для обработки больших объёмов данных.

Поддержка различных типов данных. Это, например, списки, хэши, множества, строки, геопространственные индексы. Далее разберём их подробно.

Поддержка Pub/Sub. Redis используют для публикации сообщений и подписки на них — это полезно, например, при создании чатов.

Комьюнити. У Redis большое сообщество пользователей, которые помогают новичкам решать возникающие проблемы.

Ограничена поддержка транзакций. Транзакция в СУБД — это набор операций. В Redis существует особенность механизма транзакций: даже если одна команда не выполнится, остальные всё равно могут выполниться. Это может нарушить целостность данных — где-то будет пробел.

Можно потерять данные. В Redis есть риск потерять информацию из-за сбоя. Но этого можно избежать, если создавать резервные копии или использовать режимы сохранения на диск — в Redis это RDB и AOF.

Ограничения по объёму данных. Предел зависит от того, сколько оперативной памяти доступно на сервере.

Ограниченная поддержка реляционных данных. В реляционных базах данные организованы в таблицы, которые связаны между собой. За счёт этого можно выполнять сложные запросы одновременно к нескольким таблицам. Например, когда пользователь заполняет заявку на покупку товара, он выбирает его параметры — это одна таблица. А вот данные профиля — имя, платёжные реквизиты, адрес доставки — это другая таблица. Redis не может работать с такими данными.

Конфигурации Redis

У Redis есть несколько конфигураций:

Единственный экземпляр. Это самая простая конфигурация, которая подходит для небольших проектов или кэширования. Её суть в том, что используется один экземпляр Redis без дополнительной инфраструктуры. Правда, есть минус: у «единственного экземпляра» нет механизмов для автоматического восстановления после сбоев.

High Availability (Redis HA). Есть основная база Redis и её реплика — зависимая база. Первая принимает запросы и записывает данные, вторая делает резервные копии. Если основная база откажет, реплика может стать новой основной базой. Надёжность Redis HA выше, чем у «единственного экземпляра».

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

Redis Cluster. Наиболее сложная конфигурация, её можно использовать для масштабирования Redis в приложениях с большим объёмом данных. Здесь каждый узел функционирует как часть кластера и способен хранить данные. Если главный узел перестаёт отвечать, его задачи берут на себя другие узлы. Более того, данные здесь распределяются по элементам кластера, что снижает нагрузку на базу данных.

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

Один из плюсов Redis в том, что она может поддерживать разные структуры данных. Разберём некоторые из них:

Строки. Они могут хранить текстовые данные или бинарные — например, картинки.
Списки. Набор элементов, которые упорядочены и пронумерованы.
Множества. Неупорядоченные списки элементов.
Хэш-таблицы. Набор пар «ключ-значение». Хэши особенно полезны для хранения объектов, например, пользовательских профилей.
Сортированные множества. Они упорядочены, и у каждого элемента есть числовая метка. Это помогает при сортировке.
HyperLogLog. Подсчитывает количество уникальных элементов в множестве. HyperLogLog позволяет экономить память при обработке больших объёмов данных.
Геопространственные индексы. Выполняют операции с географическими координатами. Например, при поиске ближайших объектов.
Битовые карты. Набор последовательно записанных двоичных разрядов — битов. Битовые карты используют, например, в компьютерной графике, где она хранит значения пикселей.

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

Как начать работать с Redis

У Redis простой и интуитивно понятный интерфейс. Благодаря этому её можно быстро освоить. Начать работу с СУБД можно в Docker — это инструмент, в котором упаковывают код в специальные элементы — контейнеры, и в таком виде добавляют на сервер. Вот как начать работать с Redis через Docker:

1. Установить Docker. Можно скачать его с официального сайта, а затем проверить установку с помощью команды:
docker --version

2. Скачать Redis. Нужно загрузить официальную версию Redis с Docker Hub:
docker pull redis

3. Запустить контейнер Redis:
docker run --name redis-container -d redis

4. Подключиться к контейнеру Redis. Для этого нужно открыть новый терминал или сессию и выполнить команду для подключения к работающему контейнеру:
docker exec -it redis-container redis-cli

5. Попробовать основные команды Redis. Например, set, get или del. Далее расскажем о них подробнее.

Основные команды

Команды в Redis простые и состоят обычно из одного-двух слов. Вот несколько самых распространённых.


Команда


Что делает

SET
Устанавливает ключ и его значение. Это может быть, например, номер пользователя (user888) и его имя (Ivan).
GET
Получает значение, которое связано с ключом. Например, при вводе номера пользователя, который является ключом, можно узнать имя — значение ключа.
DEL
Удаляет ключ и его значение из базы данных.
EXISTS
Проверяет существование ключа.
APPEND
Добавляет дополнительное значение к существующему ключу. Например, к имени пользователя можно добавить год рождения.
RENAME
Меняет название ключа.
FLUSHALL
Удаляет все данные в текущем сеансе.
PUBLISH channel message
Отправляет сообщение на канал.
SUBSCRIBE channel
Подписывает на канал и начинает присылать опубликованные в нём сообщения.

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

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

Кэширование. Redis используют для кэширования данных из основной СУБД, чтобы снизить на неё нагрузку и ускорить доступ к информации. Это полезно везде, где важно время загрузки контента: на веб-сайтах, в мобильных приложениях, в играх.

Создание очередей сообщений. Redis позволяет приложениям асинхронно обрабатывать данные. Применяют, например, для систем обработки платежей и заказов.

Брокер сообщений. Redis можно использовать для чатов — при отправке и получении сообщений. Например, для настраивания систем уведомлений и оповещений в реальном времени.

Хранение сессий. С помощью Redis можно сохранять информацию о сессиях и профилях пользователей. Это необходимо, например, для быстрой аутентификации и авторизации в приложениях.

Хранение временных данных. Например, счётчиков или статистики. Это помогает при подсчёте количества посещений страницы или лайков в реальном времени.

Pub/Sub (Публикация/Подписка). Redis поддерживает механизм публикации и подписки. Например, при создании системы чатов и уведомлений, где важна передача сообщений в реальном времени.

Геопространственные данные. Redis может хранить и обрабатывать географические данные: координаты и расстояния. Например, для поиска ближайших ресторанов или магазинов на основе текущего местоположения пользователя.

Системы рейтингов и лидеров. С помощью Redis можно быстро создавать и обновлять таблицы лидеров и рейтинги. Например, в онлайн-играх.

Совет эксперта

Кирилл Дикалин
Redis улучшает производительность и скорость работы приложений. Начать знакомство с этой СУБД можно с основных команд и типов данных. Необходимо также разобраться в конфигурациях Redis Sentinel и Redis Cluster. Ещё важно учитывать, что Redis работает в оперативной памяти. Поэтому, чтобы не потерять информацию, регулярно создавайте резервные копии.
Статью подготовили:
Кирилл Дикалин
Ядекс Практикум
Автор и ревьювер курса DE, тимлид команды дата инженеров в Альфа-Банке, преподаватель на курсах DE, аналитик DWH и Highload Architect в OTUS
Надежда Низамова
Яндекс Практикум
Редактор
Анастасия Павлова
Яндекс Практикум
Иллюстратор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться

Успейте начать учебу в Практикуме до конца ноября со скидкой 20%

Mon Oct 07 2024 13:43:09 GMT+0300 (Moscow Standard Time)