Выпуск СУБД Redis 5.0

Подготовлен релиз СУБД Redis 5.0, относящейся к классу NoSQL-систем. Redis предоставляет похожие на Memcached функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua. Код проекта поставляется под лицензией BSD.

В отличие от Memcached, Redis обеспечивает постоянное хранение данных на диске и гарантирует сохранность БД в случае аварийного завершения работы. Исходные тексты проекта распространяются в рамках лицензии BSD. Клиентские библиотеки доступны для большинства популярных языков, включая Perl, Python, PHP, Java, Ruby и Tcl. Redis поддерживает транзакции, позволяющие выполнить за один шаг группу команд, гарантируя непротиворечивость и последовательность (команды от других запросов не могут вклиниться) выполнения заданного набора команд, а в случае проблем позволяя откатить изменения. Все данные в полном объёме кэшируются в оперативной памяти.

Для управления данными предоставляются такие команды, как инкремент/декремент, стандартные операции над списками и множествами (объединение, пересечение), переименование ключей, множественные выборки и функции сортировки. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений. Во втором случае гарантируется полная сохранность всех изменений. Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями «публикация/подписка», при котором создаётся канал, сообщения из которого распространяются клиентам по подписке.

Ключевые улучшения, добавленные в Redis 5.0:

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

    Для организации совместной обработки разных частей одного потока сообщений реализована концепция Consumer Groups, при которой сообщение может снабжаться идентификатором группы и несмотря на отправку в общий поток, получить это сообщение сможет только клиент с указанным идентификатором (например, через общий поток можно организовать распределение команд среди разных обработчиков);

  • Реализованы новые API для модулей: Timers, Cluster и Dictionary;
  • В дампах RDB теперь сохраняется информация об алгоритмах замещения элементов LFU (Least-Frequently Used, вытеснение на основе частоты обращения к элементу) и LRU (Least Recently Used, вытеснение на основе времени последнего обращения);
  • Код управления кластером переписан с Ruby (redis-trib.rb) на Си и встроен в redis-cli (доступен через команду »--cluster»);
  • Реализованы новые команды ZPOPMIN и ZPOPMAX, а также их блочные вариаеты BZPOPMIN и BZPOPMAX, которые извлекают и возвращают из отсортированного набора указанное число наименьших или наибольших значений;
  • Реализована вторая версия системы активной дефрагментации памяти, которая позволяет выполнять дефрагментацию налету без остановки работы, если применяется система распределения памяти Jemalloc (в Linux по умолчанию);
  • Улучшена реализация алгоритма HyperLogLog;
  • Расширены отчёты о состоянии памяти;
  • Во многие составные команды, включающие субкоманды, добавлена встроенная подсказка (субкоманда HELP);
  • Проведена оптимизация для повышения производительности в условиях частого соединения и отсоединения клиентов;
  • Менеджер распределения памяти Jemalloc обновлён до версии 5.1;
  • Добавлены команды: CLIENT UNBLOCK для досрочного снятия блокировки с соединения, выставленной при выполнении блокирующих операций (например BRPOP, XREAD, WAIT); CLIENT ID для получения идентификатора текущего соединения;
  • Добавлена развлекательная команда LOLWUT, с реализацией пасхальных яиц, которые будут меняться в каждой новой версии Redis;
  • Проведена оптимизация кода обработки сетевых соединений;
  • Выполнена работа по избавлению кода от терминов «master» и «slave». Команда «SLAVEOF» переименована в «REPLICAOF», а настройка «slaveof» в «replicaof» (для обеспечения совместимости поддержка «SLAVEOF» сохранена). Поддержка признака «slave» в командах INFO и ROLE пока оставлена, так как связана с большими нарушениями совместимости (в будущем планируется предложить альтернативу INFO и заменить в ROLE «slave» на «replica»);
  • Расширены возможности по созданию скриптов-обработчиков на языке Lua.

© OpenNet