Redis
13631

Redis


Redis - это быстрая in-memory база данных (база данных, размещаемая в оперативной памяти), кэш и брокер сообщений с открытым исходным кодом под лицензией BSD, написанная на языке C и оптимизированная для высокой производительности. Название Redis происходит от "REmote DIctionary Server".

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

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

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

Перечислим варианты использования Redis.

Интеллектуальное кэширование


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

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

Политики истечения срока действия и вытеснения старых данных


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

В некоторых случаях для вытеснения данных целесообразнее использовать метрику наименее недавно использованных (LRU) или наименее часто используемых (LFU) данных. Redis предоставляет настраиваемую вероятностную реализацию этих вариантов политики кэширования.

Каковы другие возможности использования и особенности Redis?


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

Потоки и обработка потоков


Redis является отличной очередью задач и брокером сообщений благодаря своим спискам и обмену сообщениями pub/sub. В версии 5.0 Redis к набору функций были добавлены потоки и обработка потоков, вдохновленные проектом Apache Kafka. По аналогии с темами Kafka потоки работ могут иметь группы "потребителей" обработки, которые проверяют работу и подтверждают ее завершение. Если по истечении определенного времени подтверждение не получено, то другие потребители могут подхватить эту работу, чтобы убедиться, что она выполнена.

Это позволяет реализовать Kafka-подобные модели в памяти и особенно полезно для отзывчивых неблокируемых пользовательских интерфейсов.

Обмен сообщениями с публикацией и подпиской (Pub/Sub)


Обмен сообщениями Pub/Sub позволяет передавать сообщения в каналы и получать их всем подписчикам этого канала. Эта функция позволяет информации быстро проходить через вашу инфраструктуру, не занимая места в базе данных, поскольку сообщения не хранятся. Таким образом, вы можете информировать сервисы о нагрузке на другие части инфраструктуры или приложения, или обновлять игровые результаты и передавать уведомления.

Lua Scripting


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

Геопространственные возможности


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

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

Hyperloglog


Структура данных hyperloglog позволяет вести приблизительный подсчет множеств в гораздо меньшем пространстве, чем хранение полного уникального набора элементов. Простой счетчик может вести двойной счет, а набор идентификаторов пользователей или IP будет занимать большой объем памяти. Hyperloglog позволяет в очень небольшом объеме памяти хранить хорошее приближение уникальных объектов.

Битовые карты


Битовые карты позволяют высокоэффективно хранить значения True и False в виде 1 или 0 внутри строк Redis. Благодаря возможности эффективного хранения такого типа булевых данных появляется множество вариантов использования.

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

Зрелость и надежность Redis


Создатель Redis Сальваторе Санфилиппо, или Антирес, первоначально разработал хранилище данных in-memory в нескольких сотнях строк TCL для стартапа. В 2009 году он выпустил версию, написанную на языке C, для сообщества разработчиков с открытым исходным кодом.

За прошедшее с тех пор десятилетие Redis прошел через годы разработки и тестирования и реального использования в корпоративном мире, обрабатывая триллионы транзакций для крупнейших компаний и сервисов в мире. Redis 6.0 включает зашифрованную связь SSL/TLS между узлами и гранулированные списки контроля доступа (ACL) для безопасного развертывания.

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

Пользователи Redis


Redis используется многими веб-сайтами в качестве кэша, а также некоторыми из крупнейших компаний по совместному использованию поездок и социальными сетями. В опросе разработчиков StackOverflow 2020 года 20,5% разработчиков ответили, что в настоящее время используют Redis. За последние четыре года проведения опроса Redis также был назван самой любимой разработчиками технологией баз данных.

Отличный интерфейс


Отчасти привлекательность Redis для разработчиков заключается в простом и элегантном командном интерфейсе. Эрик Редмонд и Джим Уилсон подытожили это в своей книге "Семь баз данных за семь недель": Он не только прост в использовании, он доставляет удовольствие. Если API - это UX для программистов, то Redis должен находиться в Музее современного искусства рядом с Mac Cube.

Redis упрощает использование общих фундаментальных структур данных между сервисами и процессами на высокой скорости. С помощью скриптов и модулей Lua Redis становится расширяемым доменно-специфическим языком (DSL) для ваших данных.

Управляемый сервис Redis от Instaclustr упрощает развертывание.

Хранение данных


Если данные хранятся в памяти, почему они сохраняются на диске?

Redis может быть настроен на запись на диск в двух форматах: двоичном формате и формате "файл только для добавления" (AOF). Двоичный формат отражает то, что находится в памяти, и включен по умолчанию. Файл AOF может быть включен в конфигурации и представляет собой простой журнал всех команд, который может быть воспроизведен для возвращения узла в его предыдущее состояние. Оба файла могут быть настроены на более или менее частую запись на диск.

Мягкие перезагрузки


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

Redis в качестве основной базы данных


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

Как происходит кластеризация?


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

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

Является ли Redis продуктом с открытым исходным кодом и каковы альтернативы?


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

Проект Memcached - это надежный кэш с открытым исходным кодом, который является ближайшим конкурентом Redis, хотя он менее популярен в опросах разработчиков и на GitHub. Он ориентирован на кэширование ключей/значений и не имеет дополнительных структур данных Redis или способности сохранять данные на диск для "мягкого" перезапуска. При аналогичной производительности in-memory в случае использования ключей/значений и множестве дополнительных функций, поддерживаемых Redis, более распространенным выбором является использование Redis.

Когда не следует использовать Redis?


1. Redis не подходит для кэширования статического контента. Redis не очень подходит для кэширования статического контента веб-сайтов, таких как изображения, CSS или видеофайлы. Доставка этих данных лучше всего оптимизируется с помощью конфигурации веб-сервера или использования сети доставки контента (CDN).

2. Когда задержка вообще не является проблемой, Redis может быть менее привлекательным, чем базы данных типа Apache Cassandra, которые могут хранить данные на диске. Прежде чем вы решите, что время отклика не влияет каким-либо образом на ваш сценарий использования, вам следует прочитать технический документ на эту тему, в котором представлен полный обзор исследований по задержкам.

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

Заключение


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

Получать оповещения о новых статьях:


Не нашли нужную статью? Предложите свою тему