Redis — это популярная база данных NoSQL. Это означает, что она не поддерживает какой-либо язык структурных запросов (SQL), вместо этого каждая структура данных имеет специальный набор команд, позволяющий выполнять эффективные атомарные операции. Название Redis пошло от Remote Dictionary Server или «Удаленный сервер словарей”. В Redis могут храниться различные типы структур данных, например, строки, хэши, списки, наборы, отсортированные наборы. В статье подробно расскажем об этой базе данных.
Изначально Redis был разработан для повышения производительности. Его время отклика составляет менее миллисекунды при миллионах запросов в секунду. Также он поддерживает асинхронную репликацию и кластеризацию для масштабирования.
Redis можно использовать в качестве распределенного кеша, в качестве базы данных NoSQL и в качестве брокера сообщений (режим pub\sub).
Redis как база данных
Redis не является гибкой БД на любой случай. Однако она ряд особенностей делает её популярной для многих задач:
- Высокая скорость. Вы получаете моментальный доступ к информации, так как они хранятся их в оперативной памяти. Если скорость работы для вас важнее долгосрочного хранения, такая БД вам подходит.
- Лёгкое горизонтальное масштабирование и перестройка. При необходимости можно быстро перестроить данные Redis, которые хранятся в других, более медленных хранилищах. Каждый раз при необходимости можно перестраивать агрегаты данных из более медленного хранилища в Redis.
- Отказоустойчивость. Кластеры Redis поддерживают master-slave репликацию. Когда происходит потеря связи с мастер-нодой, её реплика автоматически будет повышена до мастера. Кроме того, не все данные критичны для работы. Некоторые могут быть потеряны без ущерба для общего дела.
- Простота обслуживания. При этом функционально не уступает другим популярным базам, которые обслуживать сложнее.
- Непостоянство информации. Данные в базе периодически обновляются, поэтому Redis отлично подходит для кэширования и хранения сессионной информации. Например, хранения маршрутов или пользовательских контактов во время онлайн-покупок, а также подходит для работы с различными счетчиками и метриками.
- Множество документации. У базы данных большое коммьюнити, поэтому вы легко найдёте массу полезной документации.
- Подходит для хранения структурированных данных. Поддерживает 5 видов данных и несколько надстроек.
Когда Redis не подходит
Несмотря на то, что многие выбирают эту БД, она подходит далеко не всегда. Вот некоторые случаи, где лучше использовать другой вариант:
- Критические бизнес-данные: несмотря на то, что они являются постоянными, критические бизнес-данные обычно хранятся в более традиционных базах данных, а не в Redis.
- Сложные запросы данных: доступ к данным в хранилище «ключ-значение» возможен только по ключу. Нельзя запрашивать записи по нескольким атрибутам, не говоря уже о более сложных запросах.
- Реляционные данные: Это база данных NoSQL, и, как и другие базы данных NoSQL, она не предназначена для управления реляционными данными со всеми видами отношений между различными таблицами, всевозможными ограничениями и согласованностью данных, которые обеспечивает реляционная база данных.
- Большой объем данных : Redis не подходит в качестве базы данных, если нужно хранить очень большие наборы данных и если их количество резко растёт.
Структуры Redis
Strings (Строки)
Это самый простой и понятный тип данных, который может использоваться в большинстве ситуаций. String может содержать любые данные, такие как строка, сериализованный объект, число int\float или даже изображение JPEG. При использовании Redis в качестве кеша записи хранятся в виде строк.
Lists (Списки)
Связанный список строк: можно очень быстро переместить элемент в начало\конец списка O(1), но доступ к элементу по определенному индексу осуществляется медленно O(N). Списки обычно используются для создания очередей, но могут быть полезны для хранения любой серии событий временной шкалы, например, чтобы отмечать недавнее посещение пользователем страниц.
Sets (Наборы)
Уникальный набор строк — многократное добавление одного и того же элемента в набор приведет к тому, что в наборе будет одна копия этого элемента. Наборы полезны, когда нужно хранить только уникальные элементы.
Sorted Sets (Сортированные наборы)
Это наборы уникальных строк, но каждый элемент связан с баллами, по которым элементы упорядочиваются. Добавлять новые элементы непросто. Сортированные наборы обычно используются для построения таблиц лидеров, но могут использоваться для хранения любого типа приоритетных данных.
Hashes (Хэши)
Карта пар «ключ-значение», похожая на Java HashMap или C# Dictionary, но значение в хеше также является строкой и не может содержать вложенные объекты. Хеши обычно используются для представления таких объектов, как User, но нельзя хранить вложенные объекты, такие как пользовательский Profile.
В заключение можно сказать, что Redis – это не та база данных, которую вы будете использовать по любому случаю. Однако для своих целей она подходит отлично.