NoSQL база данных Redis

29 Января (ред)

Здесь собрана сборная информация по базе данных Redis, которая может понадобиться при работе с этим хранилищем данных или если вас спросят о ней на собеседовании:)

Redis — это система для хранения данных, которая использует пары "ключ — значение". Вместо таблиц, как в реляционных или документоориентированных базах данных, такой тип БД имеет только ключи и соответствующие им значения. Он может хранить огромное количество таких пар — до 4 294 967 295. Слишком длинные ключи при этом не рекомендуются, не только из-за занимаемой памяти, но так же и в связи с увеличением времени поиска определенного ключа в множестве в связи с дорогостоящим сравнением.

Redis отличается высокой скоростью работы. Обещается по бенчмаркам авторов этой БД, что Redis может обрабатывать примерно до 100 000 команд на выборку и запись данных в секунду на простом сервере с операционной системой GNU/Linux. Это делает Redis удобным для различных задач, таких как кеширование (временное хранение данных), индексация (упрощённый поиск данных), организация поиска и аналитика. Высокая производительность обеспечивается благодаря тому, что данные хранятся в оперативной памяти.

Redis поддерживает два ключевых режима для повышения доступности и масштабируемости: репликацию и кластеризацию.

Репликация позволяет создать несколько копий данных на разных серверах. Это может быть полезно для повышения надёжности системы, так как при выходе из строя основного сервера, запросы могут перенаправляться на реплики. Репликация обеспечивает асинхронную передачу данных между мастером (master) и репликами (slave), что позволяет уменьшить нагрузку на основной сервер.

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

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

Типы данных в Redis

Строки (String)

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

В Redis каждая строка состоит из уникального ключа и соответствующего ему значения. Оба эти элемента представлены в виде строк. По умолчанию максимальный размер строкового значения составляет 512 мегабайт. Это ограничение позволяет хранить большие объемы данных в одном элементе.

Redis предоставляет множество команд для работы с типом String, включая:

  • SET key value: Устанавливает значение по заданному ключу.
  • GET key: Возвращает значение, связанное с указанным ключом.
  • APPEND key value: Добавляет значение к существующему значению по данному ключу.
  • INCR key: Увеличивает числовое значение по заданному ключу на единицу.

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

Хеши (Hash)

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

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

Основные команды для работы с хешами включают:

  • HSET key field value: Устанавливает значение для указанного поля в хеше.
  • HGET key field: Возвращает значение для указанного поля в хеше.
  • HGETALL key: Возвращает все поля и значения в хеше.

Хеши часто используются для хранения многосотавных идентификаторов, например product:123 первая часть указывает на тип, вторая на уникальное значение.

Списки (List)

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

Добавление элемента в конец списка и удаление элемента из начала происходят с постоянной временем O(1), что делает эти операции очень быстрыми.

Для работы со списками используются следующие команды:

  • LPUSH key value: Добавляет элемент в начало списка.
  • RPUSH key value: Добавляет элемент в конец списка.
  • LRANGE key start stop: Возвращает подмассив элементов из списка.

Списки могут могут использоваться, например, для реализации очередей или стеков.

Множества (Set)

Тип данных Set в Redis представляет собой неупорядоченную коллекцию уникальных строковых значений. Множества обеспечивают быструю проверку на вхождение элемента и удобны для реализации различных алгоритмов. Каждое множество отличается уникальным ключом.

Команды для работы с множествами включают:

  • SADD key member: Добавляет элемент в множество.
  • SREM key member: Удаляет элемент из множества.
  • SMEMBERS key: Возвращает все элементы множества.

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

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

Команды для работы с упорядоченными множествами включают:

  • ZADD key score member: Добавляет элемент с заданным баллом.
  • ZRANGE key start stop: Возвращает элементы в заданном диапазоне по индексу.
  • ZRANGEBYSCORE key min max: Возвращает элементы в заданном диапазоне по баллам.

Синхронные и асинхронные команды Redis

Кроме стандартных команд, Redis также поддерживает асинхронные версии, что может существенно улучшить производительность приложений, сравнимых с более тяжеловесными системами. Эти команды работают без блокировки (non-blocking), что позволяет выполнять другие операции, пока ожидается завершение текущей задачи. Это особенно полезно при работе с высоконагруженными системами или при выполнении операций, которые могут занять значительное время.

Одним из примеров асинхронной команды в Redis является команда BLPOP (Block List Pop). Она блокирует выполнение текущей операции, если в списке нет элементов, однако сама команда позволяет эффективно работать с очередями в асинхронном режиме.

Пример использования:

BLPOP mylist 0

В данном случае команда BLPOP ожидает, пока в списке mylist появится элемент. Если элемент добавляется в список, команда возвращает его. Параметр 0 указывает, что команда будет ждать неограниченно долго, пока не появится элемент.


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

Для ответа вы можете авторизоваться


Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.