Что такое Redis: как начать с ним работать
Ее используют 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 — российской платформе для работы с исходным кодом.