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

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

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

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

Ключевые изменения в Redis 8.4:

  • Добавлена команда "FT.HYBRID" с реализацией гибридного поиска, сочетающего в одном запросе возможности полнотекстового и векторного поиска, учитывающего как прямые совпадения, так и близость по смыслу. Поддерживаются возможности агрегирования результатов с синтаксисом как у команды "FT.AGGREGATE".
  • Повышена пропускная способность в типовых применениях Redis для кэширования. Например, при нагрузках, включающих 10% операций записи (SET) и 90% операций чтения (GET) и хранении строковых значений размером 1 Кб прирост пропускной способности составил 30%.
  • Повышена производительность операций поиска (FT.SEARCH) и агрегирования результатов (FT.AGGREGATE). В нагруженных системах с большим числом параллельных запросов наблюдается прирост пропускной способности и снижение задержек до 4.7 раз при выполнении поиска и до 1.4 раза при агрегировании результатов.
  • Проведена оптимизация выделения памяти при выполнении запросов и предоставлена возможность настройки поведения при исчерпании доступной памяти (OOM, out-of-memory).
  • Снижено потребление памяти при хранении мелких строк (до 7 байт) в структурах с типом JSON. Например, массив в JSON, включающий 500 мелких элементов в формате ключ/значения теперь занимает на 37% меньше памяти.
  • Повышена эффективность хранения числовых массивов JSON, все элементы в которых имеют один тип (если раньше для каждого элемента в подобном массиве сохранялся тип и значение, то теперь тип сохраняется один раз для всего массива). В проведённом тесте подобные массивы с миллионом однородных элементов теперь требуют на 50-92% меньше памяти в зависимости от типа.
  • В команду SET добавлены опции IFEQ, IFNE, IFDEQ и IFDNE, позволяющие обойтись одной командой для обновления строкового ключа в ситуациях, когда связанное с ним значение не было изменено другим клиентом с момента его извлечения.
  • Добавлена команда XDELEX атомарного удаления строкового ключа, если связанное с ним значение не изменилось с момента извлечения.
  • Добавлена команда DIGEST, возвращающая хэш от значения, связанного с указанным ключом.
  • В команду XREADGROUP добавлена опция "CLAIM <min-idle-time>" для чтения как ожидающих (idle pending), так и поступивших сообщений.
  • Добавлена команда MSETEX для атомарного выставления или обновления разом нескольких строковых ключей, а также обновления времени их жизни.
  • Добавлен механизм атомарной миграции слотов межу узлами кластера (ASM - Atomic Slot Migration), напоминающий полную синхронную репликацию, но работающий на уровне отдельных слотов. Добавлена команда команда CLUSTER MIGRATION, при помощи которой можно импортировать слоты с других узлов, отследить прогресс миграции и при необходимости отметить ожидающие выполнения операции миграции.
  • Добавлена команда CLUSTER SLOT-STATS для оценки статистики в кластере в разрезе отдельных слотов, такой как число ключей, нагрузка на CPU и сетевой ввод/вывод.