Redis

Быстрое хранилище данных в памяти с открытым исходным кодом для использования в качестве базы данных, кэша, брокера сообщений или очереди.

Что такое Redis?

Redis (расшифровывается как Remote Dictionary Server) – это быстрое хранилище данных типа «ключ‑значение» в памяти с открытым исходным кодом. Проект возник, когда Сальваторе Санфилиппо, первоначальный разработчик Redis, захотел улучшить масштабируемость стартапа в Италии. Он создал хранилище Redis, которое теперь используется в качестве базы данных, кэша, брокера сообщений и очереди.

Redis обеспечивает время отклика на уровне долей миллисекунды и позволяет приложениям, работающим в режиме реального времени, выполнять миллионы запросов в секунду. Такие приложения востребованы в сферах игр, рекламных технологий, финансовых сервисов, здравоохранения и IoT. Сегодня Redis – одно из наиболее популярных ядер с открытым исходным кодом, в течение пяти лет подряд называемое «самой любимой» базой данных от Stack Overflow. Благодаря быстрой производительности Redis широко применяется для кэширования, управления сеансами, разработки игр, создания таблиц лидеров, аналитики в режиме реального времени, работы с геопространственными данными, поддержки служб такси, чатов и сервисов обмена сообщениями, потоковой передачи мультимедиа и приложений с отправкой сообщений по модели «издатель – подписчик» (Pub/Sub).

AWS предлагает два полностью управляемых сервиса для запуска Redis. Amazon MemoryDB for Redis – совместимый с Redis надежный сервис базы данных в памяти, который обеспечивает сверхбыструю производительность. Amazon ElastiCache for Redis – полностью управляемый сервис кэширования, который ускоряет доступ к данным из первичных баз данных и хранилищ с микросекундной задержкой. Более того, ElastiCache также предлагает поддержку Memcached, другой популярной системы кэширования с открытым исходным кодом.

Подробную информацию об ускорении приложений с Amazon ElastiCache for Redis см. в онлайн-вебинаре Tech Talk

Преимущества Redis

Производительность

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

Гибкие структуры данных

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

  • строки – текстовые или двоичные данные размером до 512 МБ;
  • списки – коллекции строк, упорядоченные в порядке добавления;
  • множества – неупорядоченные коллекции строк с возможностью пересечения, объединения и сравнения с другими типами множеств;
  • сортированные множества – множества, упорядоченные по значению;
  • хэш‑таблицы – структуры данных для хранения списков полей и значений;
  • битовые массивы – тип данных, который дает возможность выполнять операции на уровне битов;
  • структуры HyperLogLog – вероятностные структуры данных, служащие для оценки количества уникальных элементов в наборе данных;
  • потоки – очереди сообщений со структурой журналов данных;
  • пространственные данные – записи карт на основе долготы/широты, «поблизости»
  • JSON – полуструктурированный объект со вложенной структурой из именованных значений с поддержкой чисел, строк, булевских значений, массивов и других объектов

Простота и удобство

Redis позволяет писать такой же сложный код с меньшим количеством простых строк. Redis позволяет писать меньше строк для хранения, использования данных и организации доступа к данным в приложениях. Разница в том, что, в отличие от языков запросов традиционных баз данных, с Redis разработчики могут использовать простую структуру команд. Например, вы можете задействовать структуру хэш-данных Redis, чтобы перемещать данные в хранилище только одной строкой кода. Решение подобной задачи с использованием хранилища данных, не поддерживающего структуры хэш‑таблиц, потребует написания серьезного объема кода для преобразования данных из одного формата в другой. Redis уже оснащен встроенными структурами данных и предоставляет множество возможностей их комбинирования и взаимодействия с данными клиента. Разработчикам под Redis доступны более ста клиентов с открытым исходным кодом. Поддерживаемые языки программирования включают Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go и многие другие.

Репликация и постоянное хранение

В Redis применяется архитектура узлов «ведущий‑подчиненный» и поддерживается асинхронная репликация, при которой данные могут копироваться на несколько подчиненных серверов. Это обеспечивает как улучшенные характеристики чтения (так как запросы могут быть распределены между серверами), так и ускоренное восстановление в случае сбоя основного сервера. Для обеспечения постоянного хранения Redis поддерживает снимки состояния на момент времени (копирование наборов данных Redis на диск).

Redis не задуман как надежная и стабильная база данных. Если вам нужна надежная и совместимая с Redis база данных, рассмотрите Amazon MemoryDB for Redis. Поскольку MemoryDB использует надежный журнал транзакций, в котором хранятся данные нескольких зон доступности (AZ), вы можете задействовать ее в качестве основной базы данных. MemoryDB специально создана для того, чтобы разработчики могли работать с API Redis, не беспокоясь об управлении отдельным кэшем, базой данных или базовой инфраструктурой.

Высокая доступность и масштабируемость

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

Инструменты с открытым исходным кодом

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

Кэширование

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

Чат, обмен сообщениями и очереди

Redis поддерживает системы «издатель – подписчик» с заданными шаблонами и различные структуры данных, такие как списки, сортированные множества и хэш‑таблицы. Это позволяет использовать Redis для создания высокопроизводительных комнат чата, лент комментариев, работающих в режиме реального времени, лент новостей в социальных сетях и систем взаимодействия серверов. Структура данных список сервиса Redis позволяет легко создавать упрощенные очереди. Списки Redis List обеспечивают выполнение элементарных операций, а также возможности блокировки, поэтому подходят для различных приложений, в которых требуется надежный брокер сообщений или циклический список.

Игровые таблицы лидеров

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

Хранилище сессий

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

Потоковая передача мультимедиа

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

Работа с геопространственными данными

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

Machine Learning

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

Аналитика в режиме реального времени

Redis может использоваться с решениями потоковой передачи, такими как Apache Kafka и Amazon Kinesis, в качестве хранилища данных в памяти для сбора, обработки и анализа данных в режиме реального времени с задержкой на уровне долей миллисекунды. Redis – идеальный выбор для аналитики в режиме реального времени в таких примерах использования, как аналитика в социальных сетях, рекламный таргетинг, персонализация контента и IoT.

Языковая поддержка Redis

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

Python

Java

PHP

Сравнение Redis и Memcached

Как Redis, так и Memcached представляют собой хранилища данных в памяти с открытым исходным кодом. Высокопроизводительный сервис кэширования с распределенной памятью Memcached отличает простота, а Redis обладает широкими функциональными возможностями, которые позволяют эффективно использовать хранилище для разнообразных целей. Подробное сравнение функций, которое поможет вам принять решение, см. по ссылке Сравнение Redis и Memcached. Они используются с реляционными базами данных или базами данных на основе пар «ключ – значение», такими как MySQL, PostgreSQL, Aurora, Oracle, SQL Server, DynamoDB и многими другими, для повышения производительности.

Использование Redis на AWS

AWS предлагает два полностью управляемых сервиса, совместимых с Redis: Amazon MemoryDB for Redis и Amazon ElastiCache for Redis.

Amazon MemoryDB for Redis

Amazon MemoryDB for Redis – совместимый с Redis надежный сервис базы данных в памяти, который обеспечивает сверхбыструю производительность. Он разработан специально для современных приложений, созданных с архитектурой микросервисов. Amazon MemoryDB надежно хранит данные в нескольких зонах доступности (AZ), используя журнал транзакций Multi-AZ, чтобы обеспечить быструю обработку отказа, восстановление базы данных и перезапуск узла. С Amazon MemoryDB все ваши данные хранятся в памяти, что позволяет достичь микросекундной задержки чтения, задержки записи в считанные миллисекунды и высокой пропускной способности. 

Подробности об Amazon MemoryDB for Redis см. в документации MemoryDB.

Amazon ElastiCache for Redis

Amazon ElastiCache for Redis – полностью управляемый сервис кэширования, который позволяет с легкостью настраивать, управлять и масштабировать кэшем в облаке. С ElastiCache for Redis вы можете увеличить скорость приложений и достичь микросекундной задержки чтения и записи за счет кэширования данных из первичных баз данных и хранилищ. Доступен бесплатный пробный период для ElastiCache for Redis на уровне бесплатного использования AWS

Step 1 - Sign up for an Amazon Web Services account

Регистрация

Получите доступ к Amazon MemoryDB и Amazon ElastiCache.
Изучите Amazon Elasticache для Redis

Начало работы с Amazon ElastiCache

Начните работу с ElastiCache для Redis

Приступить к разработке с использованием Amazon MemoryDB

Начните разработку с помощью руководства пользователя.