Включите исполнение JavaScript в браузере, чтобы запустить приложение.
18 сен 2024

Что такое Redis: как начать с ним работать

В данной статье мы познакомимся с системой управления базами данных Redis. Разберём простыми словами, что это такое, плюсы и минусы Redis, основные команды. Где применяется Redis, и как начать с ним работать — читайте в блоге Gitverse.ru

Что такое Redis: как начать с ним работать

https://gv01-blog-obs01.obs.ru-moscow-1.hc.sbercloud.ru/image5ab5051c637b3501caace0dfa5a16a164fe1c7f8.png

Ее используют Twitter, Pinterest, Flickr. По мнению разработчиков, это самая быстрая в мире система управления БД с хранением данных в локальной памяти. Опыт работы с ней важен для программистов, сисадминов, DevOps-инженеров — такое требование предъявляют к соискателям российские работодатели в более чем 3 300 вакансий на hh.ru. Речь идет о Remote Directory Server, или сокращённо — Redis.

Что такое Redis

Redis — это нереляционная NoSQL-система управления базами данных с открытым исходным кодом. Разберем определение по частям.

Нереляционность

В отличие от реляционных СУБД, таких как MySQL и Microsoft SQL Server, Redis работает со структурами типа «ключ-значение». При этом хранить информацию можно как в традиционном табличном виде, так и в других форматах: строках, списках и массивах.

NoSQL

Remote Directory Server не поддерживает структурный язык запросов SQL. Для выполнения операций используются отдельные команды, которые мы рассмотрим ниже.

Открытый исходный код

Redis относится к свободному программному обеспечению — open-source software. Такое ПО распространяется бесплатно: исходный код можно смотреть, дополнять и переписывать под свои задачи. До 2024 года кодовая база СУБД поставлялась по свободной лицензии BSD, а дополнительные модули для корпоративных клиентов — по закрытой лицензии.

В марте 2024 года разработчики объявили об изменении лицензирования. Новые версии начиная с Redis 7.4 будут распространяться по авторским лицензиям. Теперь нельзя использовать продукт бесплатно для обеспечения работы облачных сервисов, изменять исходный код для создания коммерческих приложений и платных сервисов. Пользоваться системой управления БД для внутренних нужд можно будет бесплатно.

Особенности и преимущества Redis

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

В Remote Directory Server реализовано встроенное асинхронное дублирование информации. Это снижает риски потери данных за счет копирования и перезаписывания информации всеми компонентами. А так как дублированные записи становятся доступными каждому модулю, весь комплекс ПО работает еще быстрее.

Преимущества СУБД Redis:

  • сверхвысокая скорость отклика;
  • универсальное применение за счет работы с разнообразными структурами данных;
  • поддержка большинством языков программирования — C, Python, C++, C#, JavaScript, Java, Go, PHP;
  • простое горизонтальное масштабирование;
  • высокая отказоустойчивость;
  • простота администрирования.

Так как Redis — это open-source software, вокруг продукта сформировано большое комьюнити. В сети можно найти документацию, решения других разработчиков, ответы на большинство вопросов по настройке, управлению и использованию СУБД.

Зачем нужна система управления Redis

Популярные сценарии использования:

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

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

Несмотря на возможность выполнения операций с таблицами, СУБД не подходит для полноценной работы с реляционными данными. Система не способна обеспечить управление взаимоотношениями между элементами с учетом сложной согласованности и множества ограничений, как в SQL-решениях. Создавать сложные команды и запрашивать записи по нескольким атрибутам нельзя. 

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

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

Сценарии использования Redis

Remote Directory Server используется в приложениях, которые в режиме реального времени обрабатывают миллионы запросов в секунду. Варианты применения:

  • игры;
  • соцсети;
  • форумы; 
  • чат-боты;
  • планировщики задач.

С помощью Redis удобно реализовать работу с динамическими данными в реальном времени, например:

  • хранение сессий пользователей сайтов: сохранение товаров в корзине, примененных скидок и купонов, контактной информации;
  • проведение онлайн-голосований с показом текущих результатов;
  • формирование новостных лент;
  • ранжирование комментариев на форумах по количеству лайков и реакций;
  • автоматическая модерация сообщений перед публикацией в соцсетях;
  • отображение таблиц лидеров в онлайн-играх.

В маркетинге, логистике, Internet of Things, здравоохранении, промышленности также применяется Redis. Примеры:

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

В качестве брокера сообщений Redis интегрируют в онлайн-чаты, инструменты отправки уведомлений, Telegram-каналы и почтовые сервисы.

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

Скачать СУБД можно на официальном сайте разработчика redis.io.

Установка проводится через пакетный менеджер ОС. Система совместима с Linux и MacOS. Официальной поддержки Windows нет, но можно развертывать Redis через подсистему Windows для Linux WSL2.

Запускать СУБД нужно командой redis-server. Управление ведется в интерфейсе командной строки Redis-CLI. Чтобы проверить корректность установки, в консоли введите ping. Ответ сервера PONG означает, что установка прошла успешно. Для выхода из командной строки введите quit.

Типы данных Redis

Изначально структура СУБД состояла из пар «ключ-значение» key-value. С развитием продукта появились другие форматы.

Строки/Strings

Базовый тип данных. Записи представлены в виде текста или двоичного кода с максимальным размером 512 Мб. По функциям strings аналогичны строкам в языках программирования.

Списки/Lists

Упорядоченные и связанные списки строк. По функциям аналогичны массивам в языках программирования. Области применения — хранение серий событий по хронологии и создание очередей. Lists позволяют получать, читать и удалять элементы с начала или конца списка за определенное время даже при миллионах записей в базе.

Хеши/Hashes

Хеш-таблицы или ассоциативные массивы, представляют собой карту пар key-value. В хеше нельзя хранить вложенные объекты, а значения ключей имеют тип strings.

Множества/Sets

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

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

Набор элементов, упорядоченных по числовому параметру. Sorted sets содержит уникальные значения, каждому из них присвоено число — score. Порядок выстраивается по алгоритму A > B, если score значения A больше score значения B.

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

Чтобы посмотреть подсказки по списку команд, введите в консоли HELP @string. Запрос HELP и название запускает помощь по конкретной команде.

SET

Отвечает за установку пары «ключ-значение». Дополнительно можно указать срок действия записи значения ключа.

Синтаксис:

SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]

Параметры: 

  • EX seconds, PX milliseconds, EXAT timestamp-seconds, PXAT timestamp-milliseconds — время истечения срока действия в секундах или миллисекундах;
  • NX — устанавливает ключ, если он еще не существует;
  • XX — устанавливает ключ, если он уже существует;
  • KEEPTTL — сохранение времени жизни ключа;
  • GET — возврат старой строки, хранящейся в ключе, или нуля, если ключ не существует.

Пример:

127.0.0.1:6379> SET mykey "Hello"

"ОК"

127.0.0.1:6379> GET mykey

"Hello"

127.0.0.1:6379> SET anotherkey "will expire in a minute" EX 60

"ОК"

GET

Возвращает значение, связанное с ключом. Если ключ не существует, возвращается 0. Если значение ключа не является строкой, возвращается ошибка.

Синтаксис:

GET key

Запросим сначала значение несуществующего ключа, а затем зададим новый ключ с помощью команды SET и получим его значение:

127.0.0.1:6379> GET nonexisting

(nil)

127.0.0.1:6379> SET mykey "Hello"

"OK"

127.0.0.1:6379> GET mykey

"Hello"

EXISTS

Проверяет существование ключа в базе. Если ключ существует, возвращается 1, если нет — 0. При указании нескольких ключей возвращает количество существующих.

Синтаксис:

EXISTS key [key ...]

Пример:

127.0.0.1:6379> SET key1 "Hello"

"OK"

127.0.0.1:6379> EXISTS key1

(integer) 1

127.0.0.1:6379> EXISTS nosuchkey

(integer) 0

127.0.0.1:6379> SET key2 "World"

"OK"

127.0.0.1:6379> EXISTS key1 key2 nosuchkey

(integer) 2

APPEND

Добавляет в ключ дополнительное значение.

Синтаксис:

APPEND key value

Если ключ уже существует и является строкой, команда добавляет value в конец строки. Если key не существует, то создается ключ и задается как пустая строка.

Пример:

127.0.0.1:6379> EXISTS mykey

(integer) 0

127.0.0.1:6379> APPEND mykey "Hello"

(integer) 5

127.0.0.1:6379> APPEND mykey " World"

(integer) 11

127.0.0.1:6379> GET mykey

"Hello World"

DEL

Удаляет ключ с соответствующим значением, дополнительно возвращает количество ключей, которые удалены по данной команде.

Синтаксис:

DEL key [key ...]

Пример:

127.0.0.1:6379> SET key1 "Hello"

"OK"

127.0.0.1:6379> SET key2 "World"

"OK"

127.0.0.1:6379> DEL key1 key2 key3

(integer) 2

DECR

Уменьшает число на единицу.

Синтаксис:

DECR key

Если значение ключа не существует или содержит строку, которую невозможно представить как целое число, возвращается ошибка.

Пример:

127.0.0.1:6379> SET mykey "10"

"OK"

127.0.0.1:6379> DECR mykey

(integer) 9

127.0.0.1:6379> SET mykey "234293482390480948029348230948"

"OK"

127.0.0.1:6379> DECR mykey

(error) value is not an integer or out of range

DECRBY

Уменьшает значение ключа на указанное число decrement.

Синтаксис:

DECRBY key decrement

В данном фрагменте значение ключа 10 уменьшается на 3 единицы:

127.0.0.1:6379> SET mykey "10"

"OK"

127.0.0.1:6379> DECRBY mykey 3

(integer) 7

INCR

Увеличивает число на единицу.

Синтаксис:

INCR key

Пример:

127.0.0.1:6379> SET mykey "10"

"OK"

127.0.0.1:6379> INCR mykey

(integer) 11

127.0.0.1:6379> GET mykey

"11"

INCRBY

Увеличивает значение ключа на указанное число increment.

Синтаксис:

INCRBY key increment

В данном фрагменте значение ключа 10 увеличивается на 5 единиц:

127.0.0.1:6379> SET mykey "10"

"OK"

127.0.0.1:6379> INCRBY mykey 5

(integer) 15

Мы рассмотрели базовые команды и структуры Remote Directory Server. Для более полного погружения в возможности СУБД изучите документацию на официальном сайте в разделе Docs / Commands. Создавать, хранить и развивать программные проекты на основе Redis и других СУБД удобно на GitVerse — российской платформе для работы с исходным кодом.